gpt4 book ai didi

java - Hibernate/JPA 通过连接表和复合键实现多对多关系,Unique Constraint 问题

转载 作者:搜寻专家 更新时间:2023-11-01 00:52:19 25 4
gpt4 key购买 nike

所以我昨天问了这个问题,但是目标帖子变了,问题也不同了:

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 表实际上可以包含不链接到任何元素的行。该结构表示基于“类型”和“值”对的元素分类,并输入到此特定应用程序之外的系统中。

我想做的是通过映射将我的元素 Hibernate 实体设置为包含类别列表,这样我就可以真正看到我的元素属于哪些类别,并且让 Hibernate 为我创建表.

这是我到目前为止所得到的:在我的元素实体类中像这样映射它:

@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;
}

这完成了我想要的大部分工作,它创建了我的表,如上所示,正是我希望它们除一件事之外的方式,在(类型,值)对上的元素表中添加了一个唯一约束。我不想要这个,因为多个元素可以具有相同的类型和值对,我需要能够阻止唯一约束从创建开始,但无法弄清楚当前映射如何,我可以这样做吗?我是否忽略了多对多关系的要点?

最佳答案

Hibernate 对类型和值列设置唯一约束实际上看起来很合乎逻辑。

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

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

关于java - Hibernate/JPA 通过连接表和复合键实现多对多关系,Unique Constraint 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9228005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com