我将休眠从 3.5.6 更新到 4.10,我遇到了多对多关系的问题:
用户类
@Entity
@Table(name="user")
public class User {
@ManyToMany(fetch=FetchType.LAZY)
@Cascade(value={CascadeType.PERSIST, CascadeType.MERGE,CascadeType.REFRESH})
@JoinTable(name="usersroles", joinColumns = { @JoinColumn(name ="usersroles_user" )}, inverseJoinColumns = { @JoinColumn(name = "usersroles_role") })
@JSON(serialize=false)
public Set<Role> getRoles() {
return roles;
}
}
角色类
@Entity
@Table(name="role")
public class Role {
@ManyToMany(cascade {CascadeType.REFRESH},fetch=FetchType.LAZY,mappedBy="roles")
@JSON(serialize=false)
public Set<User> getUsers() {
return users;
}
}
那是一种查询方法:
public List<User> getUserAndRoleList() {
String jpql = "SELECT DISTINCT u FROM User u , Role r, UserRole ur WHERE u.id = ur.userId AND r.id = ur.roleId ORDER BY u.username";
QueryResult<User> qr = super.getDataWithOriginalJPQL(jpql);
userList = qr.getResultList();
return userList;
}
当我想获得角色时:
userList = userService.getUserAndRoleList();
for(int i=0;i<userList.size();i++){
Iterator<Role> it = userList.get(i).getRoles().iterator();
Role role ;
}
这行得通。但是当代码执行时
userList.get(i).getRoles()
Hibernate 4.1 会自动删除 usersroles 表中的 User 和 Role 关系。但是在 Hibernate 3.6.5 中,它并没有删除这种关系。
事实上,我根本没有删除任何东西,也没有要求 hibernate 删除任何东西。可能会发生一些我不明白的事情。如何防止 Hibernate 删除?还是我做错了什么?