Hibernate delete org.hibernate.HibernateException: ни один сеанс в настоящее время не связан с контекстом выполнения - PullRequest
0 голосов
/ 26 сентября 2018

В моем классе 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);
    }
...