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

前端之家收集整理的这篇文章主要介绍了数据库 – Hibernate saveOrUpdate vs update vs save / persist前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在努力理解hibernate方法之间的细微差别

saveOrUpdate – 更新 – 保存/保留.

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

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

Difference between save and saveOrUpdate method hibernate

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

@H_502_13@id | company 1 Company1 2 Company2

后执行代码

@H_502_13@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();

我在数据库中看到:

@H_502_13@id | company 1 Company3 2 Company4

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

解决方法

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

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

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

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

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

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

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

猜你在找的MsSQL相关文章