【问题标题】:Version property of Parent isn't incrementing if I update child如果我更新子级,则父级的版本属性不会增加
【发布时间】:2011-07-03 20:08:50
【问题描述】:

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

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

现在我想从Bar 中删除version 属性,如果Bar 得到更新,Fooversion 应该会增加。 我怎样才能做到这一点?

【问题讨论】:

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


    【解决方案1】:

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

    @Version 为实体添加了乐观锁定功能,它不应该用作更改计数器。此注解的主要目的是检测冲突的更新,因此请三思而后行。

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

    【讨论】:

      猜你喜欢
      • 2018-09-26
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-07
      • 1970-01-01
      相关资源
      最近更新 更多