SEAM / Hibernate:在对话期间,我无法从数据库中获得更改

时间:2010-11-28 10:53:07

标签: java hibernate seam seam-conversation

我有一个班级:

@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()在对话开始时调用并初始化属性栏(Bar是某个实体类)。然后,bar有一个属性baz,它也是一个实体。

在对话过程中,可能会发生某些其他用户修改与我们的栏相关的baz对象。然后,当调用end()时,bar.getBaz()返回baz的(未修改)版本,此外,覆盖它到数据库。

我尝试使用session.flush(),session.merge(bar),session.merge(bar.getBaz())在end()方法中获取baz的修改状态,但没有任何效果。如何避免数据库中的污染?

1 个答案:

答案 0 :(得分:1)

很抱歉,我无法提出详尽的答案。我不得不从DB重新加载实体,其中由另一个serverlet修改。我是通过使用JPA的refresh()方法完成的。 Hibernate会话还提供refresh()方法。您可能还需要考虑@Version注释以进行乐观锁定。