gpt4 book ai didi

java - 无法删除具有 OneToMany 关系的记录

转载 作者:行者123 更新时间:2023-12-02 09:36:27 25 4
gpt4 key购买 nike

当我删除一个表中的一条记录时,另一个表中的相关记录也应该被删除。但我收到的是:

java.sql.BatchUpdateException: Batch entry 0 update child_table set parent_table_id=null where parent_table_id=63 was aborted

上面的异常是针对以下设置引发的:

@OneToMany(cascade = javax.persistence.CascadeType.ALL, targetEntity = ChildTable.class)
@JoinColumn(name = "parent_table_id")
@org.hibernate.annotations.Fetch(FetchMode.SUBSELECT)
public List<ChildTable> getTables() {
return tables;
}

如果我没记错的话,有了这样的注释,当ParentTable中删除一条记录时,Child表中的对应关系应该被删除。在完全删除之前,它会尝试变为“null”(因为相应的记录不再存在)。该 id 列“不为空”。当我将其设置为“null”(仅用于测试这种情况)时,一切正常。

您能帮我了解这背后的真正问题是什么吗?

提前谢谢您。

最佳答案

我通常不使用注释。我更喜欢 hbm 映射文件,因此我可以告诉您一些可能的 hbm 映射解决方案。 :) 我认为您需要在父一对多关系中添加 inverse=true 。 Always put inverse=true in your parent collections 。对于 inverse=true 的等效注释,请参阅 this .

如果这不起作用,我知道这不是一个好的解决方案,您可以尝试在一对多中使用 not-found="ignore"或 @NotFound(action=NotFoundAction.IGNORE) parent 中的关系。最终与数据库外键列设置not-null=false效果相同。

关于java - 无法删除具有 OneToMany 关系的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11324255/

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