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



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

使用休眠对此进行建模的最佳方法是什么?

我目前拥有的是代表关系的另一个实体 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 这一事实,但是有没有更好的方法来模拟这种关系?

您可以将

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的生命周期始终取决于其父对象的生命周期,并且不会拥有自己的同一性。

最新更新