版本化JPA实体中@Version字段的精准更新时机咨询
@Version字段递增时机详解
以下是JPA中@Version字段在各环节的递增时机及可访问性说明:
entitymanager.flush()(含commit触发的自动flush)
@Version字段的递增操作发生在flush()执行过程中,flush完成后,实体对象上的@Version值会立即更新为递增后的版本号,此时可以直接访问该新值。@PreUpdate回调方法
@Version字段的递增是在@PreUpdate方法执行之后才触发的。因此在@PreUpdate方法内部,只能获取到更新前的旧版本号。@PostUpdate回调方法
@Version字段的递增操作在@PostUpdate方法执行之前就已完成。所以在@PostUpdate方法中,可以直接访问到已经递增后的新版本号。
验证示例代码
@Entity public class DemoEntity { @Id private Long id; @Version private Integer version; private String content; @PreUpdate public void onPreUpdate() { // 此处输出更新前的旧版本号 System.out.println("PreUpdate 当前版本:" + version); } @PostUpdate public void onPostUpdate() { // 此处输出已递增后的新版本号 System.out.println("PostUpdate 当前版本:" + version); } }
内容的提问来源于stack exchange,提问作者Pierre Demeestere
相关产品推荐
相关产品推荐

