我有一个实体 [Project],其中包含一组其他实体 [Questions]。
我已经用“all-delete-orphan”的级联属性映射了关系。
在我的数据库中,关系映射到问题表上的 project_id (FK) 字段。该字段不能为空,因为我不想要没有项目的问题。
When I do session.delete(project)
it throws an exception saying that project_id
cant be null
, but if I remove the not-null
constraint to that field,删除效果很好。
任何人都知道如何解决这个问题?
原文由 Pablo Fernandez 发布,翻译遵循 CC BY-SA 4.0 许可协议
直接来自 文档。我相信这完全解释了你的问题:
然而,这段代码
不会从数据库中删除 c;它只会删除指向 p 的链接(在这种情况下会导致违反 NOT NULL 约束)。您需要显式删除()子对象。
现在,在我们的例子中,一个 Child 没有它的 parent 就不能真正存在。因此,如果我们从集合中删除一个 Child,我们确实希望它被删除。为此,我们必须使用 cascade=“all-delete-orphan”。
编辑:
关于相反的东西,我相信这只决定了 sql 是如何生成的,请参阅此 文档 以获取更多信息。
需要注意的一件事是,你有没有
关于您的休眠配置中的多对一关系?