org.hibernate.HibernateException: получение недопустимо без активной транзакции - PullRequest
9 голосов
/ 15 марта 2012

Я новичок в 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>

Ответы [ 4 ]

14 голосов
/ 15 марта 2012

Добавить

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

как раз перед вашим CallInfo ci = (CallInfo) session.get(CallInfo.class, ucid);

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

tx.commit();
5 голосов
/ 20 июля 2012

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

Session session = HibernateUtil.getSessionFactory().openSession();
CallInfo ci = (CallInfo) session.get(CallInfo.class, ucid);
0 голосов
/ 29 ноября 2017

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

0 голосов
/ 25 мая 2016

Даже после 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) 

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

...