如何使休眠单向多对多关联可更新?
How to make hibernate unidirectional many-to-many association updateable?
我有两个实体 - Category
和 Attribute
。 Category
可以有多个相关属性,Attribute
可以与任意数量的类别相关。关联应该仅在 Category
端可用 - Attribute
对象不知道它们相关的类别。
所以我将此关联建模为单向多对多:
Category.hbm.xml
<class name="Category" table="category" proxy="ICategory" entity-name="category">
<id name="id" column="id" unsaved-value="null"><generator class="identity" /></id>
...some properties...
<bag name="relatedAttributes" table="category_attribute" fetch="select">
<key column="id_category" />
<many-to-many column="id_attribute" entity-name="attribute" />
</bag>
</class>
和Attribute.hbm.xml
<class name="Attribute" table="attribute" proxy="IAttribute" entity-name="attribute">
<id name="id" column="id" unsaved-value="null" ><generator class="identity" /></id>
...some properties...
</class>
映射与当前数据完美配合,直到需要更新为止。我只想做这些简单的事情:
ICategory c = (ICategory) session.get("category", 1);
c.getRelatedAttributes().add((IAttribute) session.get("attribute", 2));
session.update("category", c);
我怎样才能让这个关联更新?
终于完成了。影响行为的变化:
<bag name="relatedAttributes" table="category_attribute" fetch="select" inverse="false" cascade="save-update">
...
</bag>
并且不要忘记在操作后调用 session.flush()
。
我有两个实体 - Category
和 Attribute
。 Category
可以有多个相关属性,Attribute
可以与任意数量的类别相关。关联应该仅在 Category
端可用 - Attribute
对象不知道它们相关的类别。
所以我将此关联建模为单向多对多:
Category.hbm.xml
<class name="Category" table="category" proxy="ICategory" entity-name="category">
<id name="id" column="id" unsaved-value="null"><generator class="identity" /></id>
...some properties...
<bag name="relatedAttributes" table="category_attribute" fetch="select">
<key column="id_category" />
<many-to-many column="id_attribute" entity-name="attribute" />
</bag>
</class>
和Attribute.hbm.xml
<class name="Attribute" table="attribute" proxy="IAttribute" entity-name="attribute">
<id name="id" column="id" unsaved-value="null" ><generator class="identity" /></id>
...some properties...
</class>
映射与当前数据完美配合,直到需要更新为止。我只想做这些简单的事情:
ICategory c = (ICategory) session.get("category", 1);
c.getRelatedAttributes().add((IAttribute) session.get("attribute", 2));
session.update("category", c);
我怎样才能让这个关联更新?
终于完成了。影响行为的变化:
<bag name="relatedAttributes" table="category_attribute" fetch="select" inverse="false" cascade="save-update">
...
</bag>
并且不要忘记在操作后调用 session.flush()
。