我有两个表Item和Property,一个Item可以有多个属性。我已经在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>
使用cascade="all-delete-orphan"
。有关这种关系的演练,请参阅参考指南中的第一个示例。同样,如果这是一个双向的一对多,那么这一边(集合)应该与inverse="true"
映射,这样关系就可以完全基于关系的另一边来确定。