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

JPA Hibernate多对多级联

卢雅惠
2023-03-14
问题内容

我正在使用JPA 2.0并hibernate。我有一个用户类和一个组类,如下所示:

public class User implements Serializable {
    @Id
    @Column(name="USER_ID")
    private String userId;

    @ManyToMany
    @JoinTable(name = "USER_GROUP",
               joinColumns = {
                   @JoinColumn(name = "GROUP_ID")
               },
               inverseJoinColumns = {
                   @JoinColumn(name = "USER_ID")
               }
    )
    private Set<Group> groupList;

    //get set methods
}

public class Group
{
    @Id
    @Column(name="GROUP_ID")
    private String groupId;

    @ManyToMany(mappedBy="groupList")
    private Set<User> memberList;
    //get set methods
}

然后,我创建一个用户和组,然后将该用户分配给该组。

我要拥有的是删除组时(当然),该组将被删除,并且该组具有的所有用户-组关系将从USER_GROUP连接表中自动删除,但用户本身不会从USER表。

使用上面的代码,当我删除组时,只有GROUP表中的行将被删除,并且用户在USER_GROUP连接表中仍然具有已删除组的条目。

如果我像这样在User类中放置层叠:

@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name = "USER_GROUP",
joinColumns =
{
    @JoinColumn(name = "GROUP_ID")
},
inverseJoinColumns =
{
    @JoinColumn(name = "USER_ID")
})
private Set<Group> groupList;

当我删除组时,用户也将被删除!

有什么方法可以实现我想要的吗?


问题答案:

映射的方式User是关系的管理方,因此它将负责更新联接表。

JoinTable映射从更改UserGroup,并设置的groupList属性,User使其具有mappedBy属性。这会将组更改为关系的管理方,并向该组进行持久性/更新调用以管理联接表。

但是请注意,您将不能简单地向用户添加组,保存用户并继续,而必须将用户添加到组并保存组以查看更改,但是希望有双向多对多关系,无论如何您将密切管理这种关系。



 类似资料:
  • 问题内容: 我在我的数据库3个表:,和 学生可以有多个课程,课程可以有多个学生。和之间存在多对多关系。 我为我的项目和课程添加了3个案例。 (a)当我添加用户时,它会保存得很好, (b)当我为学生添加课程时,它会在-预期行为中创建新的行。 (三)当我试图删除学生,则在删除适当的记录和,但它也删除其中不需要的记录。即使课程中没有任何用户,我也希望课程在那里。 下面是我的表和注释类的代码。 这是Hib

  • 我有两个实体。我想在持久化所有者实体时级联插入子实体,并将子实体的SSO_ID设置为生成器为所有者生成的实体。 ID类是: 相反,我得到了一个错误: 插入hub_users_emails(user_sso_idemail_typesso_idstart_dateuser_mail)值 (?, ?, ?, ?, ?) (等) 绑定参数[1]as[BIGINT]-[1234837655]= (等) 将

  • 问题内容: 我在我的数据库3个表:,和 学生可以有多个课程,课程可以有多个学生。和之间存在多对多关系。 我为我的项目和课程添加了3个案例。 (a)当我添加用户时,它会保存得很好, (b)当我为学生添加课程时,它将在-预期行为中再次创建新行。 (三)当我试图删除学生,则在删除适当的记录和,但它也删除其中不需要的记录。即使课程中没有任何用户,我也希望课程在那里。 下面是我的表和注释类的代码。 这是Hi

  • 使用Spring Boot 1.4.0和MySql 5.7 我有两个table并且它是单向的@manytomany,但是在角色的父端,我想删除权限hibernate会自动删除它自己和link-table记录: > 权限

  • 我目前正在开发一个网络票证系统,并有课程来存储我的票证数据。每个票据都可以有多个相关标签,为了管理这些标签,我创建了一个标签编辑器。这很好,只缺少一个删除选项。到目前为止,大多数删除都失败了,原因是该标签仍然被另一个票证引用,这需要先删除它。在寻找解决方案的过程中,我遇到了CascadeType。删除,这似乎正是我想要的。 但是,由于ticket对象包含一组标签,而不是相反,因此每次我删除一张ti