Hibernate / JPA通过连接表和复合键,Unique Constraint问题有多对多的关系

时间:2012-02-10 12:46:08

标签: java hibernate many-to-many composite-key unique-constraint

所以我昨天问了这个问题,但是目标职位已经改变,问题不同了:

Hibernate / JPA Collection of Elements with Many to Many relationship?

我想知道是否可以创建将模拟我所需关系的实体,以便Hibernate在我启动应用程序时创建我的模式。

我想要的关系如下:

1 http://a8.sphotos.ak.fbcdn.net/hphotos-ak-ash4/417593_10150594114269218_505554217_8657377_1475865815_n.jpg

问题是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,但是无法弄清楚当前映射的方式,我可以这样做吗?我错过了多对多关系的观点吗?

1 个答案:

答案 0 :(得分:1)

Hibernate在类型和值列上放置一个唯一约束似乎是合乎逻辑的。

您在@ManyToMany映射中说,在连接表中,joincolumns是类型和值列。所以基本上你说hibernate应该通过value和type属性确定哪个元素与ElementCategory耦合。因此,2个属性的组合应该是唯一的。否则,hibernate将不知道哪个Element属于哪个ElementType

如果您希望多个Element实体可以耦合到多个ElementType实体,并且type和value的组合并不总是唯一的,那么您不能将这些属性用作joincolumns