SPRINGBOOT JPA灵异事件

ghjvbng 2018-05-02 11:15:32
save()方法保存了我不想保存的东西

首先findOne()方法找到一个实体,暂且叫A,实体包含Id属性和一个引用类型的数据
然后new一个这个实体,叫B,将那个引用类型稍作修改后set到B中
save()这个实体B

理想情况是B作为一个新的记录被插入到数据库,这个没问题,但是A在这次save()中那个引用类型也被保存了,问题是我并没有save()实体A啊

我的springboot是1.4版本
...全文
520 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
幽饮烛 2018-05-02
  • 打赏
  • 举报
回复
JPA 中,持久态的 bean set 属性之后,会自动更新到数据库。
QWERT4745 2018-05-02
  • 打赏
  • 举报
回复
hibernate持久化造成的吧,如果是集合就需要重新一条条遍历到新的对象中,不然不需要更新操作,也会自动保存到数据库
幽饮烛 2018-05-02
  • 打赏
  • 举报
回复
引用 3 楼 ghjvbng 的回复:
对于A来说,我没有set他,只是get出来做了修改,并没有save他,这个也会自动更新吗
有很多条件可以改变这种现象。 所以这里指的是一般情况下,只要一个对象是持久态,不管是通过其它对象获取到的对象,还是通过语句查询到的对象,且在事务中修改数据,那么事务提交时就会提交到数据库中,不需要手动调用更新方法。 这里得区分 save 和 update,在 hibernate 中,save 是插入数据,update是更新数据。 而在 jpa 中,不叫 save、update,而叫 persist、merge。
ghjvbng 2018-05-02
  • 打赏
  • 举报
回复
引用 2 楼 zssazrael 的回复:
JPA 中,持久态的 bean set 属性之后,会自动更新到数据库。
对于A来说,我没有set他,只是get出来做了修改,并没有save他,这个也会自动更新吗

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧