簡體   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