Nhibernate - item的ParentID被更新为null,而不是被删除
本文关键字:删除 null 更新 item ParentID Nhibernate | 更新日期: 2023-09-27 18:17:23
流程内部的业务逻辑是:
- <
- 开始事务/gh>
- 添加一个项目到集合
- 执行查找("somethingA")
- 根据上一步删除该项。 <
- 提交事务/gh>
我在父类中使用了级联all-delete-orphans和反向=true。当从集合中删除项目时,我设置.parentObj = null
并从集合中删除该项目。
当使用TemplateFlushMode.Auto
时,我对数据库进行了概要分析,并完成了以下操作:
- <
- 插入项/gh>
- SELECT related tosomethingA
- UPDATE parentID(到父节点的FK)为NULL
(为了保证数据库中的数据一致性,执行了find()
操作,因此执行了插入项)。选择完成,然后我希望执行DELETE
…但是parentID = null
已经更新了。
在执行Find()
之前执行Session.Flush()
时,会发生以下情况:
- <
- 插入项/gh>
- SELECT related tosomethingA
- 删除项目
当使用TemplateFlushMode.Commit
时,更改在事务结束时完成,并且永远不会插入项:
- SELECT related tosomethingA
我正在使用的应用程序是使用TemplateFlushMode.Auto
,所以我想知道,,是否有一个解释,为什么级联不工作,如果一个选择是在一个项目之间进行添加,然后在同一事务中删除?
我知道出现的第一个答案是"不要将项目添加到集合中,如果它之后将被删除"。但我宁愿不改变业务逻辑。
有人知道为什么使用AUTO
时正在做更新而不是delete
吗?(当使用Commit
时,不插入对象)
我想你应该在你的映射文件中使用cascade="delete"
选项,以便级联删除
您是否使用双向一对多绑定?你在details
表的外键上标注了not-null="true"
了吗?你能把你的映射XML文件贴出来以便更好地理解吗?
我知道我还没有回答你的问题,但是我没有足够的声誉来发表评论。