我有一个User
实体,其中包含一系列角色。
当我删除user
时,我希望删除子角色。
但是,外键只是设置为null并且不会被删除。你能解释一下为什么会出现这种情况吗?我添加了CascadeType.ALL
我认为会删除子角色。
User.java
@SerializedName("userrole")
@Expose
@OneToMany(mappedBy = "user", fetch=FetchType.EAGER, cascade = CascadeType.ALL)
private List<Role> userRoles = new ArrayList<Role>();
Role.java
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
private RoleEnum role;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user")
private User user;
删除后的表格
+----+------+------+
| id | role | user |
+----+------+------+
| 1 | 0 | NULL |
| 2 | 1 | NULL |
| 3 | 2 | NULL |
| 4 | 3 | NULL |
| 5 | 4 | NULL |
| 6 | 5 | NULL |
| 7 | 6 | NULL |
| 8 | 7 | NULL |
+----+------+------+
非常感谢任何帮助。
答案 0 :(得分:2)
您可以使用orphanRemoval
属性实现此目的。引用JPA 2.0 Spec。
指定为OneToOne或OneToMany的关联支持使用orphanRemoval 选项。当orphanRemoval生效时,以下行为适用:
如果从关系中删除了作为关系目标的实体(通过设置 关系为null或从关系集合中删除实体),删除操作 将被应用于孤儿的实体。删除操作在时间应用 冲洗操作。 orphanRemoval功能适用于私有实体 &#34;资&#34;由他们的父实体。否则便携式应用程序必须不依赖于 特定的删除顺序,不得将已经孤立的实体重新分配给另一个实体 关系或以其他方式试图坚持下去。如果孤立的实体是一个分离的,新的, 或者删除实体,orphanRemoval的语义不适用。
如果将删除操作应用于托管源实体,则删除操作将是 根据第3.2.3节的规则级联到关系目标,(因此它是 没有必要为关系指定cascade = REMOVE
所以你的OneToMany
注释看起来像,
@OneToMany(mappedBy = "user", fetch=FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval=true)