2016-02-12 171 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的生命周期总是依赖于它的父对象的生命周期,并不会持有其自己的身份

相关问题