删除具有单向关系的实体 @ManyToOne (JPA)
removing entity with unidirectional relationship @ManyToOne (JPA)
我有问题,因为我不知道如何从用户中删除特定角色。此问题与权限 class 中的单向关系有关。
这些只是相关的代码片段。
Class 人
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long userId;
@OneToMany(cascade = CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="user")
private Collection<Role> roles;
Class 角色
@Entity
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long roleId;
@ManyToOne( fetch=FetchType.LAZY)
private User user;
我试图通过这种方式从用户中删除特定角色
user.getRoles().remove(roleToRemove)
entityManger.merge(user)
roleToRemove 已从集合中删除,但未从数据库中删除。 (我写的测试已经完成)
所以,我添加了
orphanRemoval = true
目前我在权限 class 中遇到单向关系问题。我收到 DatabaseExepction 因为我想删除的 idRole 存在于 Permision table.
@Entity
public class Permission {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long permissionId;
@ManyToOne( fetch=FetchType.LAZY)
private Role role;
所以,我的问题是如何解决这个问题。
您好,用户不是关系用户 - 角色的所有者。您需要更新关系的拥有端才能使其正常工作。
user.getRoles().remove(roleToRemove)
roleToRemove.setUser(null)
entityManger.merge(user)
我的理解是您不需要删除孤儿。
这不是单向的,而是双向的。您需要为对象模型维护用户角色关系的双方以反映数据库。让您的代码管理任何关系的双方是一种很好的做法,可以避免此类问题。由于您已经从用户的角色集合中删除角色,因此您还需要清空角色对用户的引用并合并用户和角色。
拥有方控制数据库中的外键,因此只会发生 1 个影响角色行的更新语句,但您的对象模型将与数据库同步,从而防止缓存变得不同步.
我有问题,因为我不知道如何从用户中删除特定角色。此问题与权限 class 中的单向关系有关。 这些只是相关的代码片段。
Class 人
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long userId;
@OneToMany(cascade = CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="user")
private Collection<Role> roles;
Class 角色
@Entity
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long roleId;
@ManyToOne( fetch=FetchType.LAZY)
private User user;
我试图通过这种方式从用户中删除特定角色
user.getRoles().remove(roleToRemove)
entityManger.merge(user)
roleToRemove 已从集合中删除,但未从数据库中删除。 (我写的测试已经完成)
所以,我添加了
orphanRemoval = true
目前我在权限 class 中遇到单向关系问题。我收到 DatabaseExepction 因为我想删除的 idRole 存在于 Permision table.
@Entity
public class Permission {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long permissionId;
@ManyToOne( fetch=FetchType.LAZY)
private Role role;
所以,我的问题是如何解决这个问题。
您好,用户不是关系用户 - 角色的所有者。您需要更新关系的拥有端才能使其正常工作。
user.getRoles().remove(roleToRemove)
roleToRemove.setUser(null)
entityManger.merge(user)
我的理解是您不需要删除孤儿。
这不是单向的,而是双向的。您需要为对象模型维护用户角色关系的双方以反映数据库。让您的代码管理任何关系的双方是一种很好的做法,可以避免此类问题。由于您已经从用户的角色集合中删除角色,因此您还需要清空角色对用户的引用并合并用户和角色。
拥有方控制数据库中的外键,因此只会发生 1 个影响角色行的更新语句,但您的对象模型将与数据库同步,从而防止缓存变得不同步.