1,nativeQuery = true和false的区别
nativeQuery = true时,是可以执行原生sql语句,
@Query(value = "select * from jpa_user where id=?1 ",nativeQuery = true)
nativeQuery = false时,不是原生sql,sql语句里面的表和字段并不是 数据库的表名和字段名,而是实体类的类名和属性名。
这里的User是实体类,注意大小写。然后我看网上别人直接可以写select name,gender from User u where u.id=?1,结果我这样弄就报错。。。
@Query(value = "select u from User u where u.id=?1 ",nativeQuery = false)
2,update更新
如果使用CrudRepository的save(S entity)方法,entity设置了主键id就会去更新,如果没设置就会insert。
有个蛋疼的地方:更新时会更新全部字段。比如说如果entity有id(主键),name,age三个属性,但是你只想更新age,于是你只给age赋值,然而jpa在更新数据库时会贴心的帮你把name更新成null。。。
在网上查解决方法是通过repository得到entity,然后再操作这个entity去更新,我感觉并不是很好。因为本身调用save(S entity)方法,hibernate就会先select再update,然后我还要先通过repository得到entity也就是又select一次,这个也太占资源了