2010-01-08 30 views
0

我有一個Hibernate類叫做Expression(這裏簡化了您的觀賞樂趣):休眠創建兩個主鍵時,我只想要一個

@Entity 
public class Expression { 
    @Id 
    @GeneratedValue 
    private long id; 

    private String data; 

    @OneToMany(fetch=FetchType.EAGER) 
    @Cascade({CascadeType.MERGE, CascadeType.PERSIST}) 
    private Set<Expression> dependencies; 
} 

這將創建兩個表,Expression(id, data)Expression_Expression(expression_id, dependencies_id)。但是,Hibernate將expression_id和dependencies_id列設置爲主鍵,所以我不能有一個重複的dependencies_id,這正是我想要的。

例如,如果我有三個表達式:

Expression x = new Expression("0"); 
Expression y = new Expression("1"); 
Expression z = new Expression("x + y"); 
Set<Expression> tmp = new HashSet<Expression>(); 
tmp.add(x); 
tmp.add(y); 
z.setDependencies(tmp); 
// Persist x, y, and z. 

然後Hibernate將執行以下操作:

插入xExpression表ID = 1和數據= 「0」
插入y轉換成Expression表,其中id = 2且data =「1」
z插入Expression表中,id = 3且data =「a + B」
插入一行,在‘Expression_Expression’表expression_id = 3和dependencies_id = 1(製作z從屬的x。)

但是,當它試圖插入一行到Expression_Expression表expression_id = 3和dependencies_id = 2(使z成爲依賴於y)我得到一個重複的輸入錯誤。

我想能夠在Expression_Expression表中具有相同的expression_id值多行。

任何援助將不勝感激!

回答

2

您應該在這裏使用@ManyToMany關係