如何映射具有属性的一对多关系(休眠)

时间:2016-02-12 15:12:27

标签: java hibernate

我有2个实体O和D,从O(一)到D(很多)有一对多的关系。关系本身有一个属性 - 计数。

使用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;
}

这是最好的方法吗?我不喜欢这种关系有自己的id的事实,但有没有更好的方法来建立这种关系?

1 个答案:

答案 0 :(得分: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的生命周期总是依赖于其父对象的生命周期,并且不具有自己的身份