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

Lin*_*k19 5 java many-to-many hibernate composite-key unique-constraint

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

Hibernate/JPA具有多对多关系的元素集合?

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

我想要的关系看起来像这样:

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

问题是Join表实际上可以包含不链接到任何Elements的行.该结构表示基于"类型"和"值"对的元素分类,并输入到该特定应用之外的系统中.

我希望能够做的是通过映射将我的元素Hibernate实体设置为包含类别列表,这样我就可以实际看到我的元素所属的类别,以便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;
}
Run Code Online (Sandbox Code Playgroud)

这完成了我想要的大部分内容,它创建了我的表格,如上所述,我想要的只是一个东西,在(类型,值)对的元素表中添加了一个唯一约束.我不希望这样,因为多个元素可以具有相同的类型和值对,我需要能够从开始创建中停止Unique Constraint,但是无法弄清楚当前映射的方式,我可以这样做吗?我错过了多对多关系的观点吗?

bva*_*sen 1

事实上,Hibernate 对类型和值列施加了唯一的约束,这似乎很合乎逻辑。

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

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