Вызов метода createQuery недопустим без активной транзакции - PullRequest
1 голос
/ 07 августа 2020

Я использую DropWizard и Hibernate. Я собираю свой SessionFactory следующим образом:

        Configuration configuration = new Configuration();
        configuration.setProperty(AvailableSettings.DRIVER, "org.h2.Driver");
        configuration.setProperty(AvailableSettings.USER, "");
        configuration.setProperty(AvailableSettings.PASS, "");
        configuration.setProperty(AvailableSettings.URL, "jdbc:h2:file:./var/test");
        configuration.setProperty(AvailableSettings.DIALECT, "org.hibernate.dialect.H2Dialect");
        configuration.setProperty(AvailableSettings.CURRENT_SESSION_CONTEXT_CLASS, "thread");
        return configuration.buildSessionFactory();

(См. этот вопрос , если вам интересно, почему.)

Первый из этих createQuery вызовов успешно, а второй - с ошибкой (с ошибкой в ​​заголовке):

        try (Session session = sessionFactory.openSession()) {
            Transaction transaction = session.beginTransaction();
            session.createQuery(...).executeUpdate();
            sessionFactory.getCurrentSession().createQuery(...).executeUpdate();
            transaction.commit();
        }

Два сеанса предполагается, что должны быть разными, или это артефакт того, как я установил дела обстоят? Причина, по которой я хочу, чтобы вторая версия работала, заключается в том, что она фактически вызывается из другого класса, у которого есть только дескриптор фабрики. Должен ли я проводить сеансы?

...