当前位置: 首页 > 面试题库 >

Hibernate / JPA通过联接表和组合键实现多对多关系,Unique Constraint问题

邓嘉致
2023-03-14
问题内容

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

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

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

关键是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;
}

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


问题答案:

实际上,Hibernate对type和value列施加唯一约束似乎很合逻辑。

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

如果希望将多个Element实体耦合到多个ElementType实体,并且类型和值的组合并不总是唯一的,则不能将这些属性用作联接列



 类似资料:
  • 问题内容: 我已经建立了一个简单的多对多关系帐户:Hibernate角色,但是当我在添加角色后尝试在单元测试中保存帐户时,出现UnsupportedOperationException异常: 这是怎么了 我的实体设置有问题吗?或者这是hibernate或JPA限制,迫使我将m:m关系分解为3:n关系,也为m:n关系表建模(我想避免这种情况,因为它没有任何关系)附加信息)。我已经在原型中为其他1:n

  • 我用复合键定义了两个实体之间的多对多关系。问题是,当我获得join对象时,它只被过滤了关系的一侧,而不是两边。 图片使问题更加清晰。这里,我要查找的是dtid=185和prid=352,但我从多对多关系中得到的是两个突出显示的行。 天丁:

  • 我有两个多对多关联的表。 DB详细信息:用户-->列[Id,name]

  • 我有以下两个类(和他们的pk类)与这些注释。我删除了setters/getters/hashcode/equals来压缩示例 我最终得到了这个错误 我的猜测是,因为“年”是在联接表中共享的,所以我弄乱了一些关联实体的语法。请注意,这些视图的实体之间存在隐式关系,我正试图在注释中对其建模。我尝试了一些JPA建模工具,这些工具在建模后给了我同样的错误。我已尝试将联接列设置为,并将设置为。 我当然可以只

  • 你能帮我解决这个问题吗? 以下是相关代码摘录: 帐户: 例外情况: org.hibernate.exception.sqlgrammarexception:无法提取org.hibernate.exception.internal.sqlexceptiontypedelegate.convert(sqlexceptiontypedelegate.java:80)(org.hibernate.exce