【问题标题】:ManyToMany in JPA: how to insert record into join tableJPA中的ManyToMany:如何将记录插入连接表
【发布时间】:2011-06-27 14:25:26
【问题描述】:

我在应用程序中有 2 个实体:组和用户,它们之间的多对多连接。当一个用户被创建时,它应该加入几个现有的组。

我看到了展示如何更新 3 个表的示例(添加了 2 个实体,并在连接表中创建了一个新行)。在我的情况下,不应更新 Groups 表,我得到 org.hibernate.exception.ConstraintViolationException 因为 3 个查询正在运行,其中一个正在尝试插入表中已经存在的 Group。

谢谢

【问题讨论】:

  • 我不明白你是否真的尝试过你提到的例子,但如果这两个实体已经存在,那么 Hibernate 只会创建它们之间的链接,有效地只发出一个 SQL(用于连接表) .如果您更改用户和/或组,则会发出更多 SQL,但这是意料之中的。您是否遇到任何具体问题?
  • 我尝试了基本示例,但遇到了问题:当我创建用户并向其添加组时,我收到 ConstraintViolationException 因为它也在尝试插入组。
  • 连接表上的约束(唯一/主要)是什么?您是否有一个带有主键的额外列,或者唯一/主键是组和用户外键引用的复合体。
  • 在我的连接表中没有约束。两个实体表中都定义了约束。现在我发现如果我在数据库中查找服务,将其添加到用户,然后持久化用户,它可以正常工作。大概就是这样的解决方案? Services 表有 GeneratedValue ID 和 UniqueConstraint。

标签: hibernate jpa many-to-many


【解决方案1】:

如下所示的连接表可能会解决您的问题;

@Entity
@Table(name = "Groups")
public class Group { 

    @ManyToMany
    @JoinTable(name = "Group_Users", joinColumns = {
            @JoinColumn(name = "group_id", referencedColumnName = "id") }, inverseJoinColumns = {
            @JoinColumn(name = "user_id", referencedColumnName = "id") })
    private List<User> users;

当一个用户被创建时,它应该像这样加入几个现有的组;

Group_Users

Group_id | User_id

组_1 |用户_1

组_2 |用户_1

Group_3 |用户_1

【讨论】:

    猜你喜欢
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 2014-03-04
    • 2017-10-10
    • 2014-08-09
    • 1970-01-01
    相关资源
    最近更新 更多