hibernate锁

乐观锁

版本号和时间戳

@version注解或者映射文件

如果是数据库触发更新则使用注解

@org.hibernate.annotations.Generated(GenerationTime.ALWAYS)

如果是用的session-per-conversation方式,会在最后flush的时候检查冲突

如果是用的session-per-request-detachedobject方式,也是在reattach到session flush的时候检查冲突,如果你确定对象没有改变过,可以使用lock方法代替update方法

对于遗留系统,可以无法修改表结构或者有其他应用也访问这个数据库,无法通过特定的版本或者时间戳字段来实现乐观锁。hibernate通过指定optimistic-lock=all,比较一行记录所有字段的状态,只有session-per-conversation可以。

有时允许并发更新,只要不出现交错,设置optimistic-lock=dirty,只比较脏数据

所有这些情况,如果关联对象设置了传播性持久化,为避免不必要的更新,最好设置select-before-update,当发生修改了才更新

你可能感兴趣的:(hibernate锁)