zhangzhenhuajack/spring-data-jpa-guide

想请教一下 jpa save方法 是怎么判断是不是真的update呢

luozongle opened this issue · 5 comments

发现如果调用save方法保存的实体类跟数据库里的数据一样 jpa并没有执行update语句 貌似是又去数据库里查了一次 但是查询出来怎么判断的呢

image
一:如果实例里面没有如下标示的@Version字段,那么如果ID为空,直接insert,如果ID有值,jpa会发起select查询看看这个id对应的记录是否存在,如果存在update,如果不存在insert;

@Version
private Long version;

二:如果实例有上的@Version字段
version和ID都要有值才会才发发起select查询对象是否数据库里面的有,如果有update,如果没有insert;
总结:

  1. 当ID和Version字段都有值的情况下才会认为可能是新对象;当save的时候,每次都会执行两条sql。
  2. 如果ID活着Version字段没有值,直接insert;

不知道的情况下:spring.jpa.show-sql=true自己观察

奥奥 但是我打开这个查看执行的sql spring.jpa.show-sql=true 发现正常来说是要执行update的 因为这个实体对象有id,当和这个实体类与数据库里的字段相同的时候 它就不执行update了 我又没重写equals 它是怎么判断需不需要真的执行update的呢