saveorupdate()如果传入的对象在数据库中有就做update操作,如果没有就做save操作。
save()在数据库中生成一条记录,如果数据库中有,会报错说有重复的记录。
update()就是更新数据库中的记录
主键在saveorupdate()方法中是起着关键作用的,只有这个主键的值不为空的时候才进行insert还是update的判断,否则直接insert
若主键不为空(不能使自己分配的主键),就可以进行saveorupdate()操作了。
当你的主键是自己分配的时候 就不能使用saveorupdate()了,否则会报 Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1 这个错误。这时只能使用save()方法直接保存了。
save是返回插入数据的主键,而saveOrUpdate是void方法。
save方法更适用于确定了是要插入,而且需要得到插入数据的主键。
而saveOrUpdate更倾向于不缺定是插入还是更新,而且你不需要得到他的主键。
save()和saveOrUpdate()方法可以在没有事务的情况下执行,但是如果没有手动调用flush()方法会面临关联对象不被保存的问题。
另外:
persist()方法:
- persist()方法会将实体对象添加到持久化上下文中,如此被保存的实体后续改变会被记录。如果在提交事务或者会话flush(),对象的属性被重新赋值,那么这个变化也会被保存到数据库中。
- persist()方法必须在事务内执行,才能够将数据插入数据库。如果不在事务范围内执行,数据将丢失。
- 最后,persist()方法返回值是void,也就是说不会返回任何的值。
最新评论
徒弟可以A师傅,学生可以A老师,为什么外包不能A正式,我觉得很正常。异性相吸这是宇宙真理
PHP天下第一(狗头叼花)
第一个不需要关注公主号直接给激活码的帖子!
客户端超时断开后,服务端如果没有设置超时机制,那也会继续等待处理,万一这期间有消息到了,那不是就接受到消息处理了,但是也没有办法返回到客户端,导致消息丢失。
企业级GO项目开发实战 Kubernetes权威指南 第六版
https://pan.baidu.com/s/1q3bnTncIACKoTZFxvx7BQw?pwd=ii7n
RabbitMQ精讲,项目驱动落地,分布式事务拔高 有吗?
Spring Cloud Alibaba 微服务架构实战 https://pan.baidu.com/s/1jF5voFRoeF0lYAzAPBWSbw?pwd=chqk