无法使用hibernate从集合中删除项
我在报告和设置之间有一对多的关系。映射在父对象中定义为无法使用hibernate从集合中删除项,hibernate,requestfactory,Hibernate,Requestfactory,我在报告和设置之间有一对多的关系。映射在父对象中定义为 <set name="settings" table="SETTING" inverse="true" lazy="true" fetch="select" cascade="all-delete-orphan"> <key> <column name="REPORT_ID" not-null="true" /> </key>
<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>
我的测试加载一个“报告”,查找一个“设置”,将其从列表中删除,并在ReportDao上调用saveOrUpdate()。这将按预期工作,设置将被删除
现在是令人费解的部分。通过RequestFactory调用调用相同的方法,记录不会被删除。我没有看到异常,Hibernate拦截器指示1:已为预期条目调用onDelete()方法,
2:该事务。wasCommitted()==true。(在afterTransactionCompleted()方法中)
看起来一切正常,但记录没有从数据库中删除。我检查了SQL输出,没有发现任何删除 我发现了这个问题,但我现在关心的是RequestFactory和Hibernate如何协同工作 数据库表被映射
Report - Setting - Type
and
Report - Column - Type - Setting
RequestFactory在报告中有一个“.with”和两个映射:
with.add("settings");
with.add("Column.Type.settings");
如果我用语句删除这两个中的第二个,那么集合
将成功地保存到数据库中。如果我两者都有,那么hibernate拦截器告诉我它将删除它,但它没有,正如在原始帖子中所说的那样
我觉得这很麻烦
为什么带有
的会产生这种效果
为什么拦截器告诉我它将删除,而当它不删除时,tx.isCommitted()