首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在同一事务内新创建的记录上,Hibernate在save()之后调用get()

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

Stack Overflow用户
提问于 2011-09-03 10:56:24
回答 1查看 4K关注 0票数 2

我正在使用没有spring的hibernate 3.2.7 (别问了,客户端不支持spring),我在实现open-session-in-view模式时遇到了一个问题。当我通过调用save()将一个对象持久化到数据库中时,我会对该对象调用get(),以加载数据库中由外键表示的子对象的详细信息。问题是,当我调用get()时,没有一个子对象被加载。如果我从一个新事务调用get()方法,一切都会按预期加载。

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

代码语言:javascript
复制
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方法的一个片段,用于保存事务:

代码语言:javascript
复制
session.setFlushMode(FlushMode.MANUAL);

contract.save();

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

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

代码语言:javascript
复制
Session session = HibernateUtil.getSession();

session.setFlushMode(FlushMode.MANUAL);

try {

    contract = contract.get();

    ...
}

加载持久化合约时会调用相同的get操作方法,它工作得很好,所以我知道当get()方法被隔离在它自己的事务中时,它也能正常工作。唯一不起作用的时候是在同一事务中的save()之后调用它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-03 11:04:54

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7290860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档