这是我的简单实体:
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。
答案 0 :(得分:1)
在字段上添加@Version
注释就足够了。您还应确保entity
确实发生了变化。因为如果entity
没有更改,则版本不会更新。如果Sub-Entities
明确设置,@Version
也会更新。
在您的情况下order
应该进行更改以更新版本。 (不是子实体)