我使用以下映射创建了一个三元关联表:
<map name="Associations" table="FooToBar">
<key column="Foo_id"/>
<index-many-to-many class="Bar" column="Bar_id"/>
<element column="AssociationValue" />
</map>
我有3张桌子,Foo,Bar和FooToBar。
当我从Foo表中删除一行时,FooToBar中的相关行(或多行)会自动删除。这很好。
当我从Bar表中删除一行时,FooToBar中的相关行(或多行)仍然存在,并且对不再存在的Bar id的陈旧引用。这很糟糕。
如何在从Bar表中删除时修改我的hbm.xml以删除过时的FooToBar行?
答案 0 :(得分:0)
我还没有对此进行过测试...但你可以通过在Bar中映射FooToBar来逃避,就像这样:
<map name="Associations" table="FooToBar">
<key column="Bar_id"/>
<index-many-to-many class="Foo" column="Foo_id"/>
<element column="AssociationValue" />
</map>
请记住NH不知道foo1[bar1]
和bar1[foo1]
代表同一行,所以要小心内存中的状态(也就是说,不要访问来自双方的元素)同一会议)