gpt4 book ai didi

database - Hibernate saveOrUpdate vs update vs save/persist

转载 作者:太空狗 更新时间:2023-10-30 01:45:23 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com