0

我是 Hibernate 的新手,我有一些关于事务分界的问题(我已经在 Stack Overflow、Hibernate 文档中进行了搜索,但我还没有找到答案)。

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

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

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

我需要会话寿命更长,以便使用 get 方法显式获取集合。

我的休眠配置文件是:

<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)的更长会话?

4

1 回答 1

0

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

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

将分离的对象重新附加到新的 Hibernate 会话的方法添加到 Hibenate Beans 是否合理?就像是:

s.getCurrentSession().beginTransaction();

r.lock(p, LockMode.NONE);

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

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

谢谢你。

于 2013-02-06T10:31:53.790 回答