我正在使用Hibernate3 我有一个简单的一对多关系(父对象具有一组子对象) 如果添加/删除子对象,则更新父对象的版本,就好像子对象的状态发生更改一样,父版本的版本不会更新。
这是映射 - Category.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="net.codejava.hibernate">
<class name="Category" table="CATEGORY">
<id name="id" column="CATEGORY_ID">
<generator class="native"/>
</id>
<property name="name" column="NAME" />
<version name="version" type="integer" column="version" unsaved-value="null" />
<set name="products" inverse="true" cascade="all-delete-orphan">
<key column="CATEGORY_ID" not-null="true" />
<one-to-many class="Product"/>
</set>
</class>
Product.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="net.codejava.hibernate">
<class name="Product" table="PRODUCT">
<id name="id" column="PRODUCT_ID">
<generator class="native"/>
</id>
<version name="version" type="integer" column="version" unsaved-value="null" />
<property name="name" column="NAME" />
<property name="description" column="DESCRIPTION" />
<property name="price" column="PRICE" type="float" />
<many-to-one name="category" class="Category"
column="CATEGORY_ID" not-null="true"/>
</class>
当产品更改时,Product.version会正确更新,但Category.version保持不变。
我认为这是一个跨领域的问题,必须有一个合理的解决方案。我做了很多搜索,却找不到一个。请帮帮我
答案 0 :(得分:1)
是的,这只是hibernate工作方式的限制,我很害怕。唯一的解决方案是在需要进行更改时双方都进行更改。
您也可以刷新父级,但请记住,这会影响数据库。
答案 1 :(得分:0)
这可能是一种主观意见,但对我来说这似乎是合乎逻辑的。但是,处理此问题的一种常见方法是在父实体上使用lastUpdated
字段,每次在调用update
之前设置它。这可以在@PrePersist
和/或@PreUpdate
中完成,它可以确保实体版本在您更新时更改,无论对其或其关系进行了哪些更改。