我是Hibernate的新手,我对事务划分有一些疑问(我已经在Stack Overflow中搜索了Hibernate Documentation ..但是我还没有找到答案)。
简单查询工作正常,但是当我执行具有多个连接的复杂查询时,不会获取集合(延迟提取)以及当我尝试调用相应的
时获取方法来检索数据,我得到一个惰性的初始化异常,因为我的会话上下文是:线程,并且会话已经通过事务提交关闭。
我需要会话更长寿,以便明确地获取集合 一个get方法。
我的休眠cfg是:
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="current_session_context_class">thread</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306 /mydatabase</property>
<property name="hibernate.connection.username">user</property>
<property name="hibernate.connection.password">1234</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.use_sql_comments">true</property>
</session-factory>
在这种情况下是否有必要使用JTA事务(我不使用Web服务器),或者是否可以实现更长的没有附加到事务范围(JDBC)的会话而不显式初始化延迟集合?
答案 0 :(得分:0)
我修改了hibernate工具代码模板(ftl文件)以生成自定义DAO和Bean。
使用Maven Hibernate Tools插件,我生成了我的数据库访问层。
添加到Hibenate Beans,将分离的对象重新附加到新的Hibernate会话是否合理?类似的东西:
s.getCurrentSession()的BeginTransaction();
r.lock(p,LockMode.NONE);
一旦getter方法检索到数据,就会提交事务并关闭会话。通过这种策略,我认为可以避免延迟初始化问题。
虽然我不确定多线程或多进程情况下是否会出现任何问题。
谢谢。