- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 spring mvc 应用程序,它使用 hibernate 来处理 mysql 数据库。我有 acl
和 acl_group
表。这两个表与连接表具有多对多
关系。以下是实体类的结构:
访问权限:
public class Acl implements Serializable{
...
@ManyToMany(mappedBy = "aclCollection",fetch = FetchType.LAZY)
private Collection<AclGroup> aclGroupCollection;
//Setter and getter
}
AclGroup:
public class AclGroup implements Serializable{
...
@JoinTable(name = "acl_group_acl", joinColumns = {
@JoinColumn(name = "acl_group_id", referencedColumnName = "id")}, inverseJoinColumns = {
@JoinColumn(name = "acl_id", referencedColumnName = "id")})
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Collection<Acl> aclCollection;
//Setter and getter
}
现在,我需要删除一个 AclGroup
对象,并且希望 acl_group_acl
表中的所有相关记录也被删除。但是,当我尝试通过 hibernate 删除 AclGroup
对象时,没有任何反应,并且出现 org.hibernate.exception.ConstraintViolationException
异常,Cannot delete or update aparent row :外键约束失败
消息。谁能帮我解决这个问题吗?
更新:
正如 @JB Nizet 所说,我删除了 cascade = CascadeType.ALL
。现在,acl_group
记录和相关的“acl_group_acl”记录被删除。但我遇到了以下异常:
org.springframework.http.converter.HttpMessageNotWritableException: Could not write content: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer
最佳答案
您告诉 Hibernate,AclGroup 上的所有操作都必须级联到其 ACL 集合。因此,当您删除 AclGroup 时,Hibernate 也会删除其所有 Acl。由于它是多对多关联,因此要删除的 Acl 会被其他 AclGroup 引用,从而导致违反约束。
删除组时删除该组的所有 Acl 是没有意义的,因为其他组也包含并且必须继续包含该 acl。
删除cascade = CascadeType.ALL
,一切都会正常工作。
关于java - hibernate - 多对多关系中的级联删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28853202/
我是一名优秀的程序员,十分优秀!