非Web应用程序中的Hibernate事务划分

时间:2013-02-05 14:20:23

标签: hibernate jdbc transactions

我是Hibernate的新手,我对事务划分有一些疑问(我已经在Stack Overflow中搜索了Hibernate Documentation ..但是我还没有找到答案)。

  • 首先,我使用Maven Hibernate Tools插件生成Hibernate Bean和DAOS。
  • 在生成过程之后,我将我的数据库访问jar包含到我的Java项目中。

简单查询工作正常,但是当我执行具有多个连接的复杂查询时,不会获取集合(延迟提取)以及当我尝试调用相应的

获取方法来检索数据,我得到一个惰性的初始化异常,因为我的会话上下文是:线程,并且会话已经通过事务提交关闭。

我需要会话更长寿,以便明确地获取集合 一个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)的会话而不显式初始化延迟集合?

1 个答案:

答案 0 :(得分:0)

我修改了hibernate工具代码模板(ftl文件)以生成自定义DAO和Bean。

使用Maven Hibernate Tools插件,我生成了我的数据库访问层。

添加到Hibenate Beans,将分离的对象重新附加到新的Hibernate会话是否合理?类似的东西:

s.getCurrentSession()的BeginTransaction();

r.lock(p,LockMode.NONE);

一旦getter方法检索到数据,就会提交事务并关闭会话。通过这种策略,我认为可以避免延迟初始化问题。

虽然我不确定多线程或多进程情况下是否会出现任何问题。

谢谢。