我正在使用hibernate和Spring将数据保存在数据库中,(只是为了确保我已经使用MySQL和MSSQL进行了测试)并且我遇到了一个奇怪的行为,我正在映射我的类这是方式:
public class User extends BaseDomain implements UserDetails {
@OneToMany(mappedBy = "user", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
private List<UserRole> userRole;
...
}
儿童实体:
public class UserRole extends BaseDomain implements GrantedAuthority {
@ManyToOne(optional = false, fetch = FetchType.EAGER)
@JoinColumn(name = "role_id")
private Role role;
@ManyToOne(optional = false, fetch = FetchType.EAGER)
@JoinColumn(name = "user_id")
private User user;
...
}
此时,如果我尝试删除用户,则可以:
Hibernate: delete from user_role where id=?
Hibernate: delete from user where id=?
但是,当我添加第二个父类时,我的问题就出现了:
public class Role extends BaseDomain {
@OneToMany(mappedBy = "role", cascade = CascadeType.ALL, orphanRemoval = true)
private List<UserRole> userRole;
...
}
从现在开始,hibernate只删除父(User)实体,导致异常。 我猜测我的映射有什么问题? 提前致谢。 OBS:每个其他数据库操作都可以。我也尝试Set&lt;&gt;。
更新
如果让我的第二个父类如下所示映射,它可行,但是,现在我无法从Role
方面删除子项,是否有办法在两边保持相同的行为?
@OneToMany(mappedBy = "perfil", orphanRemoval = true)
private List<UserRole> userRole;