@Version没有增加

时间:2017-05-24 11:31:33

标签: hibernate jpa spring-boot

这是我的简单实体:

import javax.persistence.Version;
@Entity
@Table(name="orders")
public class Order implements Serializable {
    @Version
    @Column(name="version")
    private Long version;

    @Version
    public Long getVersion() {
        return version;
    }
    @Version
    public void setVersion(Long version) {
        this.version = version;
    }
}

我将@Column和@Version添加到getter和setter中,因为它无效。 mysql数据库中的版本最初为null然后为0.当我执行

order = em.merge(order);

版本不增加。为什么?我希望版本在合并期间自动递增,并在版本不匹配时获得javax.persistence.OptimisticLockException。我需要像@ Lock(LockModeType.OPTIMISTIC_FORCE_INCREMENT)这样的东西吗?

另外,什么是org.springframework.data.annotation.Version?我应该用吗?它做了什么?

我正在使用弹簧靴1.5.3。

1 个答案:

答案 0 :(得分:1)

在字段上添加@Version注释就足够了。您还应确保entity确实发生了变化。因为如果entity没有更改,则版本不会更新。如果Sub-Entities明确设置,@Version也会更新。

在您的情况下order应该进行更改以更新版本。 (不是子实体)