Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当其子对象';s状态变化_Java_Mysql_Hibernate_Jpa_Persistence - Fatal编程技术网

Java 当其子对象';s状态变化

Java 当其子对象';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

我正在使用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保持不变


我认为这是一个贯穿各领域的问题,必须有一个合理的解决方案。我做了很多搜索,但是没有找到。请帮帮我吧

是的,恐怕这只是hibernate工作方式的一个限制。唯一的解决办法是,当你需要改变的时候,在两边都改变它


您也可以刷新父级,但请记住,这会影响数据库。

这可能是一种主观意见,但对我来说,这样做似乎合乎逻辑。但是,处理此问题的一种常见方法是在父实体上设置类似于
lastUpdated
的字段,每次调用
update
之前都要对其进行设置。这可以在
@PrePersist
和/或
@PreUpdate
中完成,它将确保无论对实体版本或其关系做了什么更改,只要您对其进行更新,实体版本都会发生更改。

。。当孩子的状态(一对多)发生变化时,没有办法更新家长的版本?是的。。。我想到了。。但这似乎是一种很难做到的方法。想知道是否有更好的方法。刚发现,你可以试试。除此之外,我想不出任何其他非黑客解决方案。谢谢。我想我会继续进行针对商业案例的详细检查,以查看版本是否已更改。我尝试了@PreUpdate解决方案,但它对我不起作用。如果父级只是已更改的子级,则它实际上没有调用PreUpdate。我可能做错了什么,但我想我会警告人们这可能行不通。