В моем классе DAO есть два метода, которые возвращают список сущностей, затем один удаляет эту сущность.
Оба эти метода вызываются из потока.Я использую dropwizard
framework.
Первый вызов метода проходит очень хорошо, но второй, который удаляет содержимое, терпит неудачу с исключением, говорящим org.hibernate.HibernateException: No session currently bound to execution context
Мой класс потока:
MyThread implements Runnable {
@Override
public void run() {
List<MyData> dataList = getData(lessThanId);
......
// Then in loop I delete each data
for (MyData myData : dataList) {
deleteData(myData);
}
....
}
@UnitOfWork
private void deleteData(MyData myData) throws Exception {
myDataDAO.deleteEntity(myData);
}
@UnitOfWork
public List<MyData> getData(Long lessThan) {
return myDataDAO.getDataList(lessThan);
}
}
Создание экземпляра потока в методе запуска WebApplication:
// I am constructing the thread with UnitOfWorkAwareProxyFactory
Class[] classes = {
MyDataDAO.class };
Object[]
instances = { myDataDAO };
MyThread myThread = new UnitOfWorkAwareProxyFactory(hibernateBundle).create(MyThread.class,
classes, instances);
// Мой класс DAO
public class MyDataDAO extends AbstractDAO<MyData> {
public MyDataDAO(SessionFactory sessionFactory) {
super(sessionFactory);
}
public List<MyData> getDataList(Long lessThan) {
Criteria criteria = criteria();
criteria.add(Restrictions.le("id", lessThan));
return list(criteria);
}
public void deleteEntity(MyData myData) throws Exception {
currentSession().delete(myData);
}