作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个类:
@Name("foo")
@Scope(ScopeType.CONVERSATION)
public class Foo {
@In
Session session;
@In
private Conversation conversation;
@RequestParameter
Long barId;
/* outjected fields */
@Out
Bar bar;
/* some attributes and methods */
public void start() {
/* some initializations */
this.bar = (Bar) session.get(Bar.class, barId);
}
public void end() {
/* some actions involving bar and bar.getBaz() */
conversation.end();
}
}
方法 start() 在 session 开始时被调用并初始化属性 bar(Bar 是某个实体类)。然后,bar 有一个属性 baz,它也是一个实体。
在对话过程中,可能会发生其他用户修改与我们的栏相关的 baz 对象。然后,当调用 end() 时,bar.getBaz() 返回 baz 的旧(未修改)版本,而且覆盖到数据库。
我尝试使用 session.flush()、session.merge(bar)、session.merge(bar.getBaz()) 在 end() 方法中获取 baz 的修改状态,但没有任何效果。如何避免数据库污染?
最佳答案
抱歉,我无法给出详尽的答案。我不得不从被另一个 serverlet 修改的数据库中重新加载实体。我通过使用 JPA 中的 refresh()
方法来完成此操作。Hibernate session 还提供了 refresh()
方法。您可能还想考虑用于乐观锁定的 @Version
注释。
关于java - SEAM/hibernate : I can't get changes from database during a Conversation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4296416/
我是一名优秀的程序员,十分优秀!