Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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
Hibernate JPA父实体忽略子实体版本控制_Hibernate_Jpa - Fatal编程技术网

Hibernate JPA父实体忽略子实体版本控制

Hibernate JPA父实体忽略子实体版本控制,hibernate,jpa,Hibernate,Jpa,我有两个实体类: 包含与子项的1-1关系的父项(没有用于乐观锁定的@Version): 下面是子类(具有用于乐观锁定的@Version): 在更新父实体的某些字段时,中间的子实体被另一个进程更改,所以optlock按预期增加 但这会产生问题,因为它会阻止父实体的更新,即使更新未触及子实体: ... org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction ... 如果子实

我有两个实体类:

包含与子项的1-1关系的父项(没有用于乐观锁定的@Version):

下面是子类(具有用于乐观锁定的@Version):

在更新父实体的某些字段时,中间的子实体被另一个进程更改,所以optlock按预期增加

但这会产生问题,因为它会阻止父实体的更新,即使更新未触及子实体:

...
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction
...

如果子实体未更改,是否有更直接的方法防止检查版本控制?因为最终DB中不会对其进行更新。

我已重新创建了您的示例,无法重现您的问题。当我在不修改子实体的情况下更改父实体上的属性时,它会按预期工作,并且只有一个针对父实体的更新查询。我正在使用Hibernate 5.2.5。我仍然使用Hibernate 3.6.0。说真的,它已经有6年多的历史了。在我看来,您不应该使用任何超过2年的框架(除非它是不再开发的som专有内容)。您必须定期升级依赖项(和JDK),否则技术债务将变得难以管理。制作一个独立的github示例,看看是否可以复制它。如果存在错误,您仍然需要升级Hibernate。我已重新创建了您的示例,无法重现您的问题。当我更改父实体上的属性而不修改子实体时,它将按预期工作,并且只有一个针对父实体的更新查询。我正在使用Hibernate 5.2.5。我仍然使用Hibernate 3.6.0。说真的,它已经有6年多的历史了。在我看来,您不应该使用任何超过2年的框架(除非它是不再开发的som专有内容)。您必须定期升级依赖项(和JDK),否则技术债务将变得难以管理。制作一个独立的github示例,看看是否可以复制它。如果有bug,您仍然需要升级Hibernate。
@Entity
public class Foo {
...
@Version
@Column(name="optlock")
private Integer optLock;
...
}
...
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction
...