我在报告和设置之间有一对多的关系。映射在父级中定义为
<set name="settings" table="SETTING" inverse="true" lazy="true" fetch="select" cascade="all-delete-orphan">
<key>
<column name="REPORT_ID" not-null="true" />
</key>
<one-to-many class="net.test.domain.Setting" />
</set>
孩子像这样映射父母
<many-to-one name="report" class="net.test.domain.Report" fetch="select" cascade="evict">
<column name="REPORT_ID" />
</many-to-one>
我的测试加载&#34;报告&#34;,找到&#34;设置&#34;,将其从列表中删除,并在ReportDao上调用saveOrUpdate()。这按预期工作,设置被删除。
现在令人费解的部分。通过RequestFactory调用调用相同的方法,不会删除记录。我看到没有例外,Hibernate Interceptor表示
1:已为预期的条目调用onDelete()方法,
2:该transaction.wasCommitted()== true。 (在afterTransactionCompleted()方法中)。
一切似乎都没问题,但记录不会从数据库中删除。我检查SQL输出,并没有找到删除。
答案 0 :(得分:0)
我发现了问题,但我现在担心RequestFactory和Hibernate如何协同工作。
数据库表已映射
Report - Setting - Type
and
Report - Column - Type - Setting
RequestFactory有一个&#34; .with&#34;来自带有2个映射的报告:
with.add("settings");
with.add("Column.Type.settings");
如果我删除了这两个.with
语句中的第二个,Set<Settings>
已成功保存到数据库中。如果我同时拥有它们,那么hibernate拦截器告诉我它将删除它,但它没有,如原始帖子中所述。
我觉得这很令人不安。
为什么.with
会产生这种效果?
为什么拦截器告诉我它会删除,tx.isCommitted()
何时不删除?