所以我昨天问了这个问题,但是目标职位已经改变,问题不同了:
Hibernate / JPA Collection of Elements with Many to Many relationship?
我想知道是否可以创建将模拟我所需关系的实体,以便Hibernate在我启动应用程序时创建我的模式。
我想要的关系如下:
问题是Join表实际上可以包含不链接到任何Elements的行。该结构表示基于“类型”和“值”对的元素分类,并输入到此特定应用程序之外的系统中。
我希望能够做的是通过映射将我的元素Hibernate实体设置为包含类别列表,这样我就可以实际看到我的元素所属的类别AND以便hibernate为我创建表格
这是我到目前为止所做的:在我的Element Entity类中映射这样:
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "ELEMENT_ELEMENTCATOGORY", joinColumns = {
@JoinColumn(name = "type", referencedColumnName = "type"),
@JoinColumn(name = "value", referencedColumnName = "value") })
@Column(name = "category")
public List<ElementCategory> getCategories() {
return categories;
}
这可以完成我想要的大部分内容,它创建我的表格,如上所述,我想要的只是一件事,在(类型,值)对的元素表中添加了一个唯一约束。我不希望这样,因为多个元素可以具有相同的类型和值对,我需要能够从开始创建中停止Unique Constraint,但是无法弄清楚当前映射的方式,我可以这样做吗?我错过了多对多关系的观点吗?
答案 0 :(得分:1)
Hibernate在类型和值列上放置一个唯一约束似乎是合乎逻辑的。
您在@ManyToMany映射中说,在连接表中,joincolumns是类型和值列。所以基本上你说hibernate应该通过value和type属性确定哪个元素与ElementCategory耦合。因此,2个属性的组合应该是唯一的。否则,hibernate将不知道哪个Element属于哪个ElementType
如果您希望多个Element实体可以耦合到多个ElementType实体,并且type和value的组合并不总是唯一的,那么您不能将这些属性用作joincolumns