2012-07-24 189 views
2

中使用映射語義持久映射 我有以下模型:類型A的實體與類型(B,C)的許多對實體的關聯。每個B實體最多出現在A中的一對中,但同一個C實體可以多對出現。例如: 我如何在JPA2

A1 --> (B1, C1) 
    --> (B2, C2) 
    --> (B3, C1) 

A2 --> (B1, C3) 
    --> (B2, C4) 
    --> (B3, C4) 

這遵循的java.util.Map < B的語義,C >存儲在A.此外,每個C只出現一個實體A,所以A至C的關係是一對多。我想堅持這樣一個地圖,並在Java EE6 doc中出現類似的例子。據我所知,我的代碼(如下圖),是的例子基本相同:

@Entity 
public class A implements Serializable { 
    @OneToMany(fetch= FetchType.EAGER) 
    @JoinTable(name="A_BC_MAP", 
      [email protected](name="A_ID"), 
      [email protected](name="C_ID")) 
    @MapKeyJoinColumn(name="B_ID") 
    private Map<B, C> pinnedCourses = new HashMap<Course, ScheduleTerm>(); 
    ... 
} 

出現如預期的A_BC_MAP數據庫模式,用一個三列連接表(A_ID,B_ID,C_ID) 。但是,主鍵約束由(A_ID,C_ID)對組成。 因此,我不能在地圖中存儲具有相同(地圖值)C的數據庫中的多個(地圖鍵)B.

這是預期的行爲?對於映射語義,我期望主鍵由(A_ID,B_ID)組成。難道我做錯了什麼?

我目前使用的是EclipseLink 2.3.0。

回答

0

我假設您使用EclipseLink來定義您的DDL?您始終可以使用自己的DDL腳本。

在OneToMany中有重複是不常見的,但可能使用map鍵,您可以記錄一個錯誤以使DDL生成將映射鍵定義爲主鍵而不是目標外鍵。

+0

是的,我使用EclipseLink,並希望避免編寫自己的腳本來修復這一項。我最好去哪裏記錄這樣的錯誤? – 2012-11-16 03:36:19