Java SpringRoo和Hibernate:如何防止删除

Java SpringRoo和Hibernate:如何防止删除,java,spring,hibernate,spring-mvc,spring-roo,Java,Spring,Hibernate,Spring Mvc,Spring Roo,我使用SpringRoo作为框架,Hibernate作为持久性 在我的应用程序中,用户和角色具有多对多关系。这就是用户模型的定义方式: 公共类用户{ /** */ @ManyToMany(cascade = CascadeType.ALL) private Set<Rol> roles = new HashSet<Rol>(); 我遇到了一个异常,我相信原因是最后一行。为什么要删除角色?我如何防止这种情况发生?只需丢失(cascade=CascadeType.ALL)

我使用SpringRoo作为框架,Hibernate作为持久性

在我的应用程序中,用户和角色具有多对多关系。这就是
用户
模型的定义方式:

公共类用户{

/**
 */
@ManyToMany(cascade = CascadeType.ALL)
private Set<Rol> roles = new HashSet<Rol>();
我遇到了一个异常,我相信原因是最后一行。为什么要删除角色?我如何防止这种情况发生?

只需丢失
(cascade=CascadeType.ALL)

通过在
角色
关系上指定
cascade=CascadeType.ALL
(根据定义包括
CascadeType.REMOVE
),您基本上告诉Hibrate您希望在删除
用户
时删除
角色
,这是不必要的


您只需要在删除用户时删除
user\u roles
(关系行)中的行,这由hibernate自动完成,而无需指定“CascadeType.REMOVE/All”

Cascadetype all是负责的那么我应该如何设置它的值呢?即使没有cascade,多对多记录也会被删除,这很好,非常有用。现在我明白了什么是
cascade
。我还有一些实体,删除时我还想删除其他相关实体。例如我的实体
Person
有多对一
作业
s,但作业对人员没有导航功能。我是否可以使用cascade,以便在删除
作业
时,该作业的所有人员条目也将被删除?或者唯一的方法是手动删除?此问题有多个可能的答案,因此我建议您搜索/发布它
Hibernate: select user0_.id as id1_5_0_, user0_.password as password2_5_0_, user0_.email as email3_5_0_, user0_.enabled as enabled4_5_0_, user0_.login as login5_5_0_, user0_.name as name6_5_0_, user0_.first_last_name as first7_5_0_, user0_.segundo_last_name as segundo8_5_0_, user0_.version as version9_5_0_ from user user0_ where user0_.id=?
Hibernate: select roles0_.user as user1_5_1_, roles0_.roles as roles2_6_1_, rol1_.id as id1_4_0_, rol1_.name as name2_4_0_, rol1_.version as version3_4_0_ from user_roles roles0_ inner join role rol1_ on roles0_.roles=rol1_.id where roles0_.user=?
Hibernate: delete from user_roles where user=?
Hibernate: delete from role where id=? and version=?