Мои гибернации конфигурации:зимовать один сеанс активной транзакции
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@127.0.0.1:1521:XE</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="hibernate.default_schema">gg</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="show_sql">false</property>
<property name="format_sql">true</property>
<property name="use_sql_comments">true</property>
<mapping class="com.greengrass.house.Obj"></mapping>
<mapping class="com.greengrass.house.ObjxProp"></mapping>
<mapping class="com.greengrass.house.Property"></mapping>
<mapping class="com.greengrass.house.EvQue"></mapping>
<mapping class="com.greengrass.house.EvxObj"></mapping>
</session-factory>
</hibernate-configuration>
Часть моей основной процедуры:
Session sess = HibernateUtil.getSessionFactory().openSession();
List<Obj> lobj = sess.createQuery(
"from Obj").list();
sess.beginTransaction();
Obj o2=lobj.get(1);
o2.crEvent("test", 3600, 1); //calling method
sess.getTransaction().commit();
Один из способов моего объекта неизменного:
@Transient
public void crEvent(String speech, int timeout, int maxCnt) {
Session s = HibernateUtil.getSessionFactory().getCurrentSession();
if (!s.getTransaction().isActive()) {
System.out.println("No transaction!!!");
} else {
System.out.println("Exist transaction!!!");
}
Query query = s.createSQLQuery(
"CALL p_event.cr_event(:p_speech, :p_tm, :p_max_cnt)")
.setParameter("p_speech", speech)
.setParameter("p_tm", timeout)
.setParameter("p_max_cnt", maxCnt);
int exRows = query.executeUpdate();
}
Так я получаю это результат:
No transaction!!! <--Message from the my method
Exception in thread "main" org.hibernate.HibernateException: createSQLQuery is not valid without active transaction
at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:348)
at com.sun.proxy.$Proxy16.createSQLQuery(Unknown Source)
at com.greengrass.house.Obj.crEvent(Obj.java:273)
at com.greengrass.evhandler.GreenEvHandler.main(GreenEvHandler.java:36)
Так что я не понимаю, почему HibernateUtil.getSessionFactory(). GetCurrentSession(); в методе crEvent, не может продолжить активную транзакцию из основной процедуры?
Спасибо большое, так что мне нужно перечитать документацию, спасибо в совете! – Lev