我有一个权限实体关系,其中一个用户可以拥有多个权限。当我尝试向用户更新空白set
时,更新没有进行。
我的实体
@Entity
public class Users {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String clientId;
private String userName;
private String userStatus;
@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST}, fetch = FetchType.EAGER)
private Users parentUserId;
@Builder.Default
@OneToMany(mappedBy = "parentUserId", fetch = FetchType.EAGER)
private Set<Users> children = new HashSet<>();
@OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
@Builder.Default
private Set<AccessMapping> permissions = new HashSet<>();
private Long updatedAt;
}
@Entity
public class AccessMapping {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(cascade = CascadeType.ALL)
@JoinTable(name = "FeatureGroupPermissions",
joinColumns = @JoinColumn(name = "FeatureGroupId"),
inverseJoinColumns = @JoinColumn(name = "PermissionId"))
private FeatureGroups featureGroup;
@ManyToOne
@JoinTable(name = "UserPermissions",
joinColumns = @JoinColumn(name = "UserId"),
inverseJoinColumns = @JoinColumn(name = "PermissionId"))
private Users user;
private String accessType;
private Long updatedAt;
}
一个用户有权访问多个功能组。
权限hashSet的大小等于用户拥有的权限数。如果我想删除用户的所有权限,请设置一个空白的hashSet并使用EntityManager.merge()
函数更新用户。但这是行不通的。权限仍然保留,当我获取用户时,hashSet仍具有原始长度,这意味着未删除任何权限。
关于休眠实体,我在做错什么还是不了解?
谢谢。
答案 0 :(得分:1)
您需要在代码中添加orphanremoval = true。
@OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true, fetch = FetchType.EAGER)
有关详细信息,您可以引用此链接:
JPA 2.0 orphanRemoval=true VS on delete Cascade
而且,您的联合设置看起来很奇怪,它应该是这样的(第一列是拥有的一面):
@JoinTable(name = "UserPermissions",
joinColumns = @JoinColumn(name = "PermissionId"),
inverseJoinColumns = @JoinColumn(name = "UserId"))