加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

数据库 – Hibernate saveOrUpdate vs update vs save / persist

发布时间:2020-12-12 07:44:55 所属栏目:MsSql教程 来源:网络整理
导读:我正在努力理解hibernate方法之间的细微差别 saveOrUpdate – 更新 – 保存/保留. 我知道网站上有一些类似的问题: What are the differences between the different saving methods in Hibernate? Difference between save and saveOrUpdate method hibernat
我正在努力理解hibernate方法之间的细微差别

saveOrUpdate – 更新 – 保存/保留.

我知道网站上有一些类似的问题:

What are the differences between the different saving methods in Hibernate?

Difference between save and saveOrUpdate method hibernate

但是看过它们之后,我没有注意到答案涵盖了在任何情况下使用这些方法产生的所有问题.我想提一下我创建的测试示例:
我有一个带有记录的表USER:

id     |      company



1             Company1

2             Company2

然后执行代码:

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
 Transaction tx = session.beginTransaction();

 User user1 = (User) session.load(User.class,Integer.valueOf(1));
 user1.setCompany("Company3");
 User user2 = (User) session.load(User.class,Integer.valueOf(2));
 user2.setCompany("Company4");
 session.persist(user1);
 session.save(user2);

 tx.commit();

我在数据库中看到:

id     |      company



 1             Company3

 2             Company4

我注意到在这种情况下保存和持久执行与saveOrUpdate或update相同的任务.因此,问题是它们之间的差异是什么以及何时需要saveOrUpdate或更新.我是对的,即使使用Cascade,保存或持久化相关对象也不会更新?

解决方法

save()和persist()都用于在数据库中插入新实体.您在数据库中已存在的实体上调用它们.所以他们什么都不做.

它们之间的主要区别在于save()是Hibernate专有的,而persist()是标准的JPA方法.此外,save()保证为实体分配和返回ID,而persist()则不然.

update()用于将分离的实体附加到会话.

saveOrUpdate()用于根据实体的状态(新的或分离的)保存或更新实体.

请注意,您无需调用会话的任何方法来修改附加实体:执行

User user1 = (User) session.load(User.class,Integer.valueOf(1));
user1.setCompany("Company3");

足以让数据库中的用户1的公司更新. Hibernate检测对附加实体所做的更改,并自动将它们保存在数据库中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读