Hibernate的一对多关系没有正确更新



我有两个表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"映射,这样关系就可以完全基于关系的另一边来确定。

最新更新