Java 当其子对象';s状态变化
我正在使用Hibernate3 我有一个简单的一对多关系(父对象有一组子对象) 如果添加/删除子对象,则会更新父对象的版本,就像子对象的状态已更改一样,父对象的版本不会得到更新 这是地图- Category.hbm.xmlJava 当其子对象';s状态变化,java,mysql,hibernate,jpa,persistence,Java,Mysql,Hibernate,Jpa,Persistence,我正在使用Hibernate3 我有一个简单的一对多关系(父对象有一组子对象) 如果添加/删除子对象,则会更新父对象的版本,就像子对象的状态已更改一样,父对象的版本不会得到更新 这是地图- Category.hbm.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "h
<?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保持不变
我认为这是一个贯穿各领域的问题,必须有一个合理的解决方案。我做了很多搜索,但是没有找到。请帮帮我吧是的,恐怕这只是hibernate工作方式的一个限制。唯一的解决办法是,当你需要改变的时候,在两边都改变它
您也可以刷新父级,但请记住,这会影响数据库。这可能是一种主观意见,但对我来说,这样做似乎合乎逻辑。但是,处理此问题的一种常见方法是在父实体上设置类似于
lastUpdated
的字段,每次调用update
之前都要对其进行设置。这可以在@PrePersist
和/或@PreUpdate
中完成,它将确保无论对实体版本或其关系做了什么更改,只要您对其进行更新,实体版本都会发生更改。。。当孩子的状态(一对多)发生变化时,没有办法更新家长的版本?是的。。。我想到了。。但这似乎是一种很难做到的方法。想知道是否有更好的方法。刚发现,你可以试试。除此之外,我想不出任何其他非黑客解决方案。谢谢。我想我会继续进行针对商业案例的详细检查,以查看版本是否已更改。我尝试了@PreUpdate解决方案,但它对我不起作用。如果父级只是已更改的子级,则它实际上没有调用PreUpdate。我可能做错了什么,但我想我会警告人们这可能行不通。