it-swarm.com.ru

org.hibernate.HibernateException: получение недопустимо без активной транзакции

Я новичок в Hibernate.

  • Автоматически созданный hibernate.cfg.xml (мастер Netbeans)
  • Автоматически созданный HibernateUtil.Java
  • Автоматически созданный класс POJO с аннотациями

Попытка получить объект из базы данных, но с ошибкой:

Exception in thread "pool-1-thread-1" org.hibernate.HibernateException: get is not valid without active transaction
    at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.Java:297)

получение объекта:

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
CallInfo ci = (CallInfo) session.get(CallInfo.class, ucid);

hibernate.cfg.xml

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/sochi_feedback</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>
<property name="hibernate.current_session_context_class">thread</property>
9
VextoR

Добавлять

Transaction tx = session.beginTransaction(); // Этот оператор инициирует транзакцию

незадолго до вашей CallInfo ci = (CallInfo) session.get(CallInfo.class, ucid);

и в конце вашей транзакции зафиксируйте изменения, позвонив ..

tx.commit();
14
Shashank Kadne

Другое решение заключается в использовании openSession() вместо getCurrentSession(). Тогда транзакции можно использовать только тогда, когда это необходимо для обновления запросов.

Session session = HibernateUtil.getSessionFactory().openSession();
CallInfo ci = (CallInfo) session.get(CallInfo.class, ucid);
5
Amil Waduwawara

Перед тем, как вы фактически начнете транзакцию, вам нужно запустить сеанс, вызвав session.beginTransaction(), сразу после создания sessionFactory.

0
Farruh Habibullaev

Даже после beginTransaction() и commit(), если вы все еще получаете

Caused by: org.hibernate.HibernateException: setDefaultReadOnly is not valid without active transaction
    at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.Java:352) 

перейдите в "Пуск" и найдите службы и перезапустите службу базы данных

0
prasad