0

我将 JPA 2 与 Hibernate 3.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; 
}

现在我的问题是,如果我Foo从like加载entityManager.find(...)和更新并触发,name那么Hibernate 会触发更新并仅增加一个版本。从对象的角度来看,它不会改变 Foo 的状态,也不应该增加 Foo 的版本吗? 现在我想删除属性,如果更新,应该增加。我怎样才能做到这一点?Barfoo.getBar().setName("someAnotherName");entityManager.merge(foo)BarBar

versionBarversionFooBar

4

1 回答 1

3

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

@Version 为实体添加了乐观锁定功能,不应将其用作更改计数器。此注释的主要目的是检测冲突更新,所以在这样做之前要三思而后行。

覆盖此行为的唯一方法是使用 [OPTIMISTIC | 悲观]_FORCE_INCREMENT

于 2011-02-24T20:35:12.720 回答