ManyToMany::如何只保存“连接表”中的数据,只保存“所属方”

问题描述 投票:0回答:1

“MyUser”表和“Roles”表之间存在多对多关系,其中“joining table”=“USERS_ROLES”。 当我保存“MyUser”时::数据已成功保存到“MyUser”表、“角色”表和“连接表”表中。 我这样做::

@Entity
@Table(name = "users")
public class MyUser {
 ...

  @ManyToMany(cascade = {CascadeType.PERSIST})
  @JoinTable(name = "USERS_ROLES",
      joinColumns = {@JoinColumn(name = "user_id_pk")},
      inverseJoinColumns = {@JoinColumn(name = "role_id_pk")})
  private List<Roles> listRoles;
 ...
}

就是这样::

@Entity
@Table(name = "roles")
public class Roles {
  ...
  @ManyToMany(mappedBy="listRoles")
  private List<MyUser> myUsersList;
  ...
}

我希望数据仅保存到“MyUser”表和“连接表”,即数据不保存到“Roles”表。

如果我使用“CascadeType.REMOVE”,则会引发错误。这是::“TransientObjectException:对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例:角色”。

嗯,就是“MyUser”对象包含了另一个“Roles”对象,我保存了“MyUser”,而我没有保存“Roles”,所以抛出这个错误。

问题:那么如何将数据仅保存到“MyUser”表和“joining table”表中,即数据不保存到“Roles”表中? 有人有什么想法吗?

java hibernate spring-data-jpa many-to-many
1个回答
0
投票

您应该删除

CascadeType.PERSIST
,以便数据仅保存到
users
表和
USERS_ROLES
表,而不保存到
roles
表。

© www.soinside.com 2019 - 2024. All rights reserved.