Hibernate值不会从数据库中删除

时间:2014-01-15 08:01:02

标签: java hibernate spring-mvc

@Entity
public class EUser {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id; 
    @ManyToMany(fetch=FetchType.EAGER)
    private List<UserRole> roles;
}

执行以下操作时

EUser approveUser = (EUser) userService.getOne(2); 
 approveUser.getRoles().clear();   
 userService.update(approveUser);
 System.out.println(approveUser.getRoles().size());

它表示大小为零但是当我在EUser_UserRole表中查看数据库时,我看到值仍然存在。怎么解决这个?

也在EUser_UserRole中说

This table does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available

如何删除手动添加编辑删除?

3 个答案:

答案 0 :(得分:0)

se CascadeTypeReference

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<UserRole> roles;

更新:

orphanRemoval属性可以使用JPA 2.x版本。您必须通过比较UserRole和新的rolesList`

来找出已删除的old rolesList数据

orphanRemoval属性不支持ManyToMany映射。

答案 1 :(得分:0)

级联确实是一种让Hibernate执行删除的方法,如果我看到已发布的代码,那很可能是要求的。但由于问题是手动删除,而级联更自动删除,我必须将建议添加到:

  • 使用EntityManager.remove()
  • 调用JPQL删除查询

更适合“手动”删除的描述。

答案 2 :(得分:0)

请勿对ManyToMany关系使用级联。这可能会导致广泛的实体群集上的不希望的波纹删除比人们希望的更容易。

如果要清除单个用户与其角色的关系(从连接表中删除行),则需要清除双方的关系字段,这意味着清除UserRole中的EUser列表{1}}并从相应EUser个实例的列表中删除当前UserRole

编辑:

清除相关实体列表时,您不会从数据库中删除任何实体。唯一的结果是连接表中的某些行将被删除,在下次提取/刷新后,您的EUserUserRole实例将不再相关。

如果要删除UserRoles数据库条目,可以在删除与

的关系后执行此操作