流程中的业务逻辑是:
我在父类中使用了cascade all-delete-orphans和inverse = true。从集合中删除项目时,我设置了.parentObj = null
并从集合中删除了该项目。
使用TemplateFlushMode.Auto
时,我分析了数据库并完成了以下操作:
(插入项目已完成,因为find()
已完成,以保证数据库中的数据一致性)。选择完成后,我希望执行DELETE
...但是parentID = null
的更新已完成。
在Session.Flush()
之前执行Find()
时,会发生以下情况:
使用TemplateFlushMode.Commit
时,更改将在事务结束时完成,且项目永远不会插入:
我正在使用的应用程序正在使用TemplateFlushMode.Auto
,所以我想知道,是否有一个解释为什么如果在添加一个项目之后完成选择并且之后删除了级联不起作用同样的交易?
我知道出现的第一个答案是“不要在集合中添加项目,如果之后将删除”。但我宁愿不改变业务逻辑。
在使用delete
时,是否有人知道为什么要更新而不是AUTO
? (当使用Commit
时,它不插入对象)
答案 0 :(得分:1)
我猜您应该在映射文件中使用cascade="delete"
选项以便在删除时级联
答案 1 :(得分:0)
您使用双向一对多绑定吗?您是否在not-null="true"
表中的外键上标记了details
?您能否发布您的映射XML文件以便更好地理解?
我知道我没有回答你的问题,但我没有足够的声誉来发表评论。