springdatajpa 学习小结

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一次,这个也太占资源了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值