繁体   English   中英

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

[英]SEAM/Hibernate: I can't get changes from database during a 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是某些实体类)。 然后,bar具有属性baz,它也是一个实体。

在对话期间,其他用户可能会修改与我们的酒吧相关的baz对象。 然后,在调用end()时,bar.getBaz()返回baz的版本(未修改),并且将其覆盖到数据库中。

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

抱歉,我无法给出详尽的答案。 我不得不从数据库中重新加载由另一个serverlet修改过的实体。 我通过使用JPA的refresh()方法做到了这一点。 Hibernate会话还提供了refresh()方法。 您可能还需要考虑使用@Version批注进行乐观锁定。

暂无
暂无

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

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