gpt4 book ai didi

java - hibernate 一对多删除列表

转载 作者:行者123 更新时间:2023-12-01 12:25:37 25 4
gpt4 key购买 nike

我有两个具有 oneToMany 关系的实体:

@Entity
@Table(name="FATHER")
@Audited(withModifiedFlag=true)
@XmlType
public class Father{

@Column(name="FATHER_ID")
private Long id;

@OneToMany(fetch = FetchType.EAGER, mappedBy = "father", orphanRemoval = true, cascade = {CascadeType.ALL})
List<Son> childrens;
//getter and setter for id, only getter for childrens.
}

@Table(name="CHILDREN")
@Entity
@Audited(withModifiedFlag=true)
public class Children{

@Column(name="CHILDREN_ID")
private Long id;

@ManyToOne
@JoinColumn(name = "FATHER_ID", nullable = false, insertable = false, updatable = false)
private Father father;
}

现在,在 Father DAO 中,我想使用以下方法删除所有子项:

Father persistentFather = entityManager.find(Father.class, fatherId);
persistentFather.getChildrens().clear();
entityManager.merge(persistentFather);

我遇到以下异常:

3:51:17 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [appServlet] in context with path [/sample.web] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement] with root cause
java.sql.SQLIntegrityConstraintViolationException: ORA-01400: cannot insert NULL into ("MYDB"."CHILDREN_AUD"."FATHER_ID")

为什么 Hibernate 无法理解来自父亲对象的father_id?我应该在 Children 中有一个father_id 字段吗?

我知道这里没有什么特别的,但在搜索了几个小时后我找不到任何解决方案......

希望有人能帮忙

最佳答案

不太确定,但这就是我认为正在发生的事情。当您调用father.getChildren().clear()时,您只是破坏了父亲与其 child 之间的关系,这意味着FATHER_ID被设置为null,并且 child 被更新。这应该可以工作,因为 orphanRemoval = true,但我认为 Hibernate Envers(我假设您正在使用它进行审核)以某种方式将其作为 MarkupSubRule 的更新,而不是删除时(或之前),并尝试将 NULL 插入到 CHILDREN_AUD.FATHER_ID 中。要检查 Envers 是否确实导致此问题,您可以暂时禁用它并重试。如果您同意,您可以更改审核表 CHILDREN_AUD 中的 FATHER_ID 以接受空值。

关于java - hibernate 一对多删除列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26362470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com