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