2010-11-10 31 views
3

我有兩個以下類:JoinTable丟失

@Entity 
class A { 
    @Id 
    private aId; 
    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    @JoinTable(name = "AB", joinColumns = @JoinColumn(name = "aId", referencedColumnName = "aId"), inverseJoinColumns = @JoinColumn(name = "bId", referencedColumnName = "bId")) 
    private Set<B> bSet; 
} 

@Entity 
class B { 
    @Id 
    private bId; 
} 

予加載從一個數據庫中的完整對象結構,然後進入第二數據庫上一個新的事務再次持續的結構。但是「AB」表格留空。這很奇怪,因爲「B」是持久的,但我只明確堅持「A」。我檢查了A對象包含非空集B,所以這不是問題。

這讓我得出這樣的結論:Hibernate認爲「AB」表應該存在,因爲「A」和「B」都已經有了它們的主鍵。有沒有辦法解決這個問題,這樣我可以讓Hibernate在第二個數據庫中保存連接表?

+0

我現在用EntityManager.merge()而不是EntityManager.persist()測試了它,並且它可以工作。但我仍然不確定堅持不懈的原因... – 2010-11-10 13:52:10

+0

aId和bId字段的類型是什麼?您在這裏發佈的方式會導致編譯錯誤。 – 2011-12-21 17:10:27

回答

0

我想這是因爲你正在使用代理對象而發生的。也就是說,如果你用new運算符創建了A和B的實例,然後調用persist,將創建Join表記錄。但是你使用的是從entitymanager (這些是代理對象),所以你必須以這種方式合併對象,entitymanager將創建這個對象的新代理。