繁体   English   中英

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

[英]Hibernate calling get() after save() on the newly created record within the same transaction

我正在使用没有spring的hibernate 3.2.7(不要问,客户端不支持spring),而且我遇到了open-session-in-view模式的实现问题。 当我通过调用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();

以下是服务层保存方法的片段,用于保存事务:

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动作方法,该方法工作正常,因此我知道get()方法在自己的事务中被隔离时可以正常工作。 它不起作用的唯一时间是在同一事务中从save()之后调用它。

你试过对对象做一个Session.refresh()吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM