请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

spring data jpa 的save()方法

老师,JpaRepository的save(product)方法做更新操作,更新商品的库存和价格,所以入参的product只
设置了商品的库存和价格,结果调用完save方法后,除了库存和价格的数据变了,其他字段全部被更新成了
null,学生要怎么做,才能动态更新我需要的更新的字段,而其他不需要更新的字段不会被更新到


正在回答 回答被采纳积分+3

2回答

廖师兄 2017-11-26 16:54:27

你对这个动态更新理解有误。

要先查询,再更新

OrderMaster orderMaster = repository.findOne("1234567");
orderMaster.setBuyerName("师兄22222333");
OrderMaster result = repository.save(orderMaster);

如果没有加@DynamicUpdate,控制台打印如下

Hibernate: update order_master set buyer_address=?, buyer_name=?, buyer_openid=?, buyer_phone=?, create_time=?, order_amount=?, order_status=?, pay_status=?, update_time=? where order_id=?

如果加了,会是这样

Hibernate: update order_master set buyer_name=? where order_id=?

我猜测你的做法应该是直接new一个对象,然后save它,你想一下,假如属性值是null, 那Jpa怎么知道你想要忽略还是真的设置为null呢

0 回复 有任何疑惑可以回复我~
  • 提问者 朱小悬 #1
    是的,我根据前台传来的数据转化成对象,JSONObject.parseObject(data,Order.class),然后执行save()操作,所以前台没有传过来的属性都会为空,所以就会更新成null,那这样的话就没有什么好的动态更新的方法了吗,我需要先从数据库中拿到需要更新的那条数据,然后对前台传来的对象属性进行判空,不为空的属性我就覆盖掉,再执行save操作?
    回复 有任何疑惑可以回复我~ 2017-11-27 19:29:11
  • 廖师兄 回复 提问者 朱小悬 #2
    是的。
    回复 有任何疑惑可以回复我~ 2017-11-27 22:48:43
廖师兄 2017-11-24 04:35:50

在你的model类上加@DynamicUpdate

0 回复 有任何疑惑可以回复我~
  • 提问者 朱小悬 #1
    这个方法实现过了,不行耶
    回复 有任何疑惑可以回复我~ 2017-11-25 16:57:56
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信