【发布时间】:2016-03-17 08:17:53
【问题描述】:
我有一个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 |
+----+------+------+
任何帮助将不胜感激。
【问题讨论】:
-
请不要从
Role.user做cascade = CascadeType.ALL。您可能不想删除用户,以防它的角色之一被删除。 -
感谢您指出这一点@NándorElődFekete
标签: java hibernate jpa one-to-many many-to-one