Java 父项的版本属性为';如果我更新子对象,则t将递增

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

我将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
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