gpt4 book ai didi

java - Hibernate 在同一个事务中新创建的记录上的 save() 之后调用 get()

转载 作者:行者123 更新时间:2023-11-29 03:54:12 25 4
gpt4 key购买 nike

我使用的是没有 spring 的 hibernate 3.2.7(别问,客户端不支持 spring),我在执行 View 中打开 session 模式时遇到了问题。当我通过调用 save() 将一个对象保存到数据库时,我然后对该对象调用 get() 以加载由数据库中的外键表示的子对象的详细信息。问题是当我调用 get() 时,没有任何子对象被加载。如果我从新事务调用 get() 方法,一切都会按预期加载。

这是我的请求过滤器的一个片段,它打开 session 并创建交易:

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();

这是服务层保存交易的保存方法的片段:

session.setFlushMode(FlushMode.MANUAL);

contract.save();

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

在持久化对象之后,请求被传递到一个 struts 操作类,该操作类调用服务中的 get() 方法,该服务具有加载契约(Contract)的代码:

Session session = HibernateUtil.getSession();

session.setFlushMode(FlushMode.MANUAL);

try {

contract = contract.get();

...
}

当加载一个工作正常的持久契约(Contract)时,会调用相同的 get 操作方法,所以我知道 get() 方法在其自己的事务中隔离时可以正常工作。它唯一不起作用的时候是在同一事务中的 save() 之后立即调用它的时候。

最佳答案

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

关于java - Hibernate 在同一个事务中新创建的记录上的 save() 之后调用 get(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7290860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com