2016-02-12 107 views
0

我有兩個實體O和D,具有從O(一)到D(許多)的一對多關係。關係本身有一個屬性 - 數量。如何映射具有屬性的一對多關係(Hibernate)

什麼是使用hibernate建模的最佳方法?

我目前擁有的是代表關係的另一個實體OD。它有自己的人工關鍵

實體的縮寫版本是如下

@Entity 
class O { 

    @Id 
    private Long id; 

    @OneToMany(mappedBy = "o") 
    private Set<OD> ods; 
} 

@Entity 
class OD { 
    @Id 
    private Long id; 

    @ManyToOne 
    private O o; 

    // This is uni-directional reln 
    @OneToOne 
    private D d; 

    private int count; 
} 

這是最好的辦法嗎?我不喜歡這種關係有自己的身份證的事實,但有沒有更好的方法來建立這種關係?

+0

你爲什麼需要OD實體,因爲你已經在O和D之間擁有'@ OneToMany'關係?如果你想計算D實體只計算O實體中的集合元素。 – over9k

+0

設置元素將代表數據記錄。意味着冗餘和重複@ over9k –

回答

0

您可以將OD建模爲@Embeddable,並將擁有方從@OneToMany更改爲@ElementCollection,例如,

@Entity 
public class O { 

    @Id 
    private Long id; 

    @ElementCollection 
    @CollectionTable(name = "OD") 
    private Set<OD> ods; 
} 

@Embeddable 
public class OD { 

    // This is uni-directional reln 
    @OneToOne 
    private D d; 

    private int count; 
} 

DDL語句將幾乎與區別相同的OD的生命週期總是依賴於它的父對象的生命週期,並不會持有其自己的身份