我有两个表项和属性,一个项可以有多个属性。我已经在hibernate中正确地建模了它(我认为),当加载ItemModel对象时,所有属性都正确加载。
问题是当我尝试删除属性然后保存它时,属性才会被添加到现有属性中。
ItemModel m = ...;
m.getPropertySet().size() // returns 5 initially
m.getPropertySet().clear();
// some update function which adds properties
m.getPropertySet().size(); // returns 1
...currentSession().saveOrUpdate(m);
现在的情况是,数据库现在有6个属性而不是1.我该怎么做才能使这个工作?
Item的映射到属性的模型看起来像这样
<set name="propertySet" cascade="all">
<key column="item_id" not-null="true"/>
<one-to-many class="Property"/>
</set>
答案 0 :(得分:4)
使用cascade="all-delete-orphan"
。有关此类关系的演练,请参阅参考指南中的first example。此外,如果这是bidirectional one-to-many,那么此方(集合)应与inverse="true"
映射,以便仅根据关系的另一方确定关系。