使用@version注释进行Hibernate乐观并发控制

时间:2014-07-23 13:58:52

标签: hibernate

我对Hibernate比较陌生。我试图通过注释时间戳字段

来使用乐观并发
@Entity
public class Request implements java.io.Serializable {

...

@Version
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "LAST_UPDATE_TIMESTAMP", length = 26)
public Date getLastUpdateTimestamp() {
    return this.lastUpdateTimestamp;
}

然后我希望下面的更新代码在并发事务更新我的实体时抛出StaleObjectStateException()

request.setStatus(status);
request.setLastUpdateTimestamp(currenttimestamp);
s.save(request);

我在调试器中运行代码并暂停以确保一个线程首先执行此代码然后恢复另一个线程。我可以看到生成的SQL,它有

update REQUEST ... where ID=? and LAST_UPDATE_TIMESTAMP=?

所以我理解更新shoudld失败并且应该抛出StaleObjectStateException(),但它不会发生。我错过了什么?

提前感谢您的帮助!

0 个答案:

没有答案