我很难理解 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
我注意到 save
和 persist
在这种情况下执行与 saveOrUpdate
或 update
相同的任务。My因此,问题是它们之间的区别是什么以及何时需要 saveOrUpdate
或 update
。我说的对吗,使用 save
或 persist
,即使使用 Cascade
,关联的对象也不会更新?
最佳答案
save()
和persist()
都用于在数据库中插入 新 实体。您在数据库中已存在的实体上调用它们。所以他们什么都不做。
它们之间的主要区别在于 save()
是 Hibernate 专有的,而 persist()
是标准的 JPA 方法。此外,save()
保证为实体分配和返回 ID,而 persist()
则不然。
update()
用于将分离的实体附加到 session 。
saveOrUpdate()
用于根据实体的状态(新建或分离)保存或更新实体。
请注意,您不需要调用 session 的任何方法来修改附加实体:做
User user1 = (User) session.load(User.class, Integer.valueOf(1));
user1.setCompany("Company3");
足以在数据库中更新用户 1 的公司。 Hibernate 检测对附加实体所做的更改,并自动将它们保存在数据库中。
关于database - Hibernate saveOrUpdate vs update vs save/persist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25708982/