Spring Roo和Hibernate:如何防止删除

时间:2014-05-23 12:48:52

标签: java spring hibernate spring-mvc spring-roo

我使用Spring Roo作为框架,使用Hibernate作为持久性。

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

公共类用户{

/**
 */
@ManyToMany(cascade = CascadeType.ALL)
private Set<Rol> roles = new HashSet<Rol>();

};

RoleUser无法导航。

删除用户后,会出现以下hibernate查询:

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=?

我得到一个例外,我相信原因是最后一行。为什么要删除该角色?我该如何防止这种情况?

1 个答案:

答案 0 :(得分:1)

完全失去(cascade = CascadeType.ALL)

通过在cascade = CascadeType.ALL关系中指定CascadeType.REMOVE(其中包括定义roles),您基本上会告诉hiberate您希望在{{1}时删除roles删除,这是不必要的。

你想要的只是删除用户时删除user(关系行)中的行,这是由hibernate自动完成的,没有指定&#34; CascadeType.REMOVE / ALL&#34;