Java 父项的版本属性为';如果我更新子对象,则t将递增
我将JPA2与Hibernate3.x一起使用。我有两个实体对象Foo和Bar,关系如下-Java 父项的版本属性为';如果我更新子对象,则t将递增,java,hibernate,version,jpa-2.0,optimistic-locking,Java,Hibernate,Version,Jpa 2.0,Optimistic Locking,我将JPA2与Hibernate3.x一起使用。我有两个实体对象Foo和Bar,关系如下- @Entity public class Foo{ @Id private long id; @OneToOne(cascade = CascadeType.ALL ) @JoinColumn(name = "bar") private Bar bar; @Version private int version; } @Entity publ
@Entity
public class Foo{
@Id
private long id;
@OneToOne(cascade = CascadeType.ALL )
@JoinColumn(name = "bar")
private Bar bar;
@Version
private int version;
}
@Entity
public class Bar{
@Id
private long id;
private String name;
@Version
private int version;
}
现在我的问题是,如果我从entityManager.find(…)
加载Foo
,并更新Bar
的name
,比如Foo.getBar().setName(“someAnotherName”)编码>并启动entityManager.merge(foo)
,然后Hibernate在Bar
上启动更新,并仅为Bar
增加一个版本。从对象的角度来看,它不也是Foo状态的改变吗?它不应该增加Foo的版本吗?
现在我想从Bar
中删除version
属性,如果Bar
得到更新,Foo
的version
应该会增加。
如何实现这一点?在您的例子中,不是Foo,而是它引用的实体已经更改,因此不需要版本增量
@版本为实体添加了乐观锁定功能,不应将其用作更改计数器。此注释的主要目的是检测冲突更新,因此在执行此操作之前请三思
覆盖此行为的唯一方法是在您的情况下使用[乐观|悲观]_FORCE_INCREMENT,而不是Foo,而是它引用的实体已更改,因此不需要版本增量
@版本为实体添加了乐观锁定功能,不应将其用作更改计数器。此注释的主要目的是检测冲突更新,因此在执行此操作之前请三思
克服这种行为的唯一方法是使用[乐观|悲观]_FORCE_INCREMENT