如果我更新子项,则Parent的Version属性不会递增

时间:2011-02-24 19:48:51

标签: java hibernate version jpa-2.0 optimistic-locking

我正在使用带有Hibernate 3.x的JPA 2。我有两个实体对象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; 
}

现在我的问题是如果我从Foo加载了entityManager.find(...)并更新name Bar foo.getBar().setName("someAnotherName");entityManager.merge(foo)并点击Bar,那么Hibernate会触发Bar上的更新,仅增加version的版本。从对象的角度来看,它也不会改变Foo的状态,也不应该增加Foo的版本吗?

现在,我想从Bar中移除version属性,Foo的{​​{1}}如果Bar更新,则会增加{{1}}。 我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:3)

在您的情况下,不是Foo,但它引用的实体已经更改,因此不需要版本增量。

@Version为实体添加乐观锁定功能,不应将其用作更改计数器。此注释的主要目的是检测冲突的更新,因此在执行此操作之前请三思。

重写此行为的唯一方法是使用[OPTIMISTIC | PESSIMISTIC] _FORCE_INCREMENT