当前位置: 首页 > 面试题库 >

Hibernate在同一事务中对新创建的记录进行save()之后调用get()

全飞扬
2023-03-14
问题内容

我正在使用没有Spring的Hibernate
3.2.7(不要问,客户端不支持Spring),而我在实现开放会话模式时遇到了问题。当我通过调用save()将对象持久保存到数据库中时,然后在该对象上调用get()来加载由数据库中外键表示的子对象的详细信息。问题是当我调用get()时,没有任何子对象被加载。如果我从新事务中调用get()方法,则一切都会按预期加载。

这是我的请求过滤器中的片段,它打开了会话并创建了事务:

HibernateUtil.openSession();

//get a transaction from JTA
transaction = (UserTransaction)new InitialContext().lookup("java:comp/UserTransaction");

transaction.begin();

// Call the next filter (continue request processing)
chain.doFilter(request, response);

// Commit and cleanup
log.finer("Committing the database transaction");
transaction.commit();

这是服务层的save方法的片段,用于保存事务

session.setFlushMode(FlushMode.MANUAL);

contract.save();

//save the update to the database
session.flush();

持久化对象后,请求将传递到Struts动作类,该动作类调用服务中的get()方法,该代码具有可加载合同的代码:

Session session = HibernateUtil.getSession();

session.setFlushMode(FlushMode.MANUAL);

try {

    contract = contract.get();

    ...
}

加载持久性合同时会调用相同的get
action方法,该方法可以正常工作,因此我知道get()方法在其自身事务中隔离时可以正常工作。唯一不起作用的时间是在同一事务中的save()之后立即调用它的时间。


问题答案:

您是否尝试过在对象上执行Session.refresh()?



 类似资料:
  • 这意味着没有为内部 我找不出这里出了什么问题?非常感谢任何帮助。

  • 问题内容: ~~~~ 如果这样做,会有所不同吗: 与 在基础查询和性能方面有什么区别? 问题答案: ~~~~ 来自: 因此,从某种意义上说,您的第二种业务方法仅对Crud Repository方法产生了阴影,它会迭代列表并代表您进行调用。 只要从您的业务方法中 划定 了 事务,性能或执行的查询就没有真正的区别。

  • 在游标和循环的帮助下,我将记录插入表中。关闭游标后,我编写了update语句来更新游标插入的一些记录,这样reords就不会更新。但我在外面进行了查询,然后更新了记录 我的尝试是删除程序,如果存在kpsf_inopdormantac; 请帮帮我

  • 问题内容: 在Hibernate中,当我在事务中有一个对象,然后回滚它时,保存的对象仍保留在DB中。奇怪,因为使用or 方法不会发生此问题,而只会使用。 这是我正在使用的代码: 这是 HibernateUtil 类(只是涉及的函数,我保证该方法能正常工作- 有一个Interceptor处理程序,但现在不重要了): 谢谢 问题答案: 检查数据库是否支持回滚,即是否使用的是InnoDB表而不是MyIS

  • 情况:JDesktopPane中有供应商_JinternalFrame。JDesktopPane中的call SetVisible(true)有一个Supplier_按钮,用于显示供应商框架。但当我通过Dispose()关闭供应商框架时;再次单击按钮后,它将隐藏并不再显示。有两个选项可以使用setshow();和setHide()而不是setDispose()。但我想重新创建Jinternalfr

  • 问题内容: 我从另一个开发人员那里获得了一个数据库。他没有在任何表上使用auto_incrementers。它们都有主键ID,但是他用代码手动完成了所有增量操作。 我现在可以把它们变成自动增量器吗? 哇,非常好,非常感谢。我的一张桌子工作顺利。但是在第二张表中,我收到此错误…将’。\ DBNAME#sql-6c8_62259c’重命名为’。\ DBNAME \ dealer_master_even