Hibernate在同一事务中对新创建的记录进行save()之后调用get()
我正在使用没有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()?
以上是 Hibernate在同一事务中对新创建的记录进行save()之后调用get() 的全部内容, 来源链接: utcz.com/qa/398919.html