database - Hibernate saveOrUpdate vs update vs save/persist

标签 database hibernate persistence

我很难理解 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

我注意到 savepersist 在这种情况下执行与 saveOrUpdateupdate 相同的任务。My因此,问题是它们之间的区别是什么以及何时需要 saveOrUpdateupdate 。我说的对吗,使用 savepersist,即使使用 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/

相关文章:

java - 具有两个查找值的 Hibernate OnetoOne 映射

Android 日期查询无法正常工作

java - 如何有效地为很多重复的表保存值(value)?

mysql - SQL = vs LIKE vs LIKE BINARY,不区分大小写

java - 尽管我使用 new 运算符,Spring Entity 仍为 null

java - org.hibernate.AssertionFailure : null identifier @OneToOne relationship

java - 在新环境中首次运行 Spring Boot 应用程序时如何运行 data.sql 脚本?

google-app-engine - 如何使用 objectify-appengine 在数据库中找到最近点

java - 在JDO(AppEngine)中,持久化一个对象后,我如何获取该特定对象的 key ?

java - JSP 和 Python 可以一起用于同一个数据库吗?