- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我很难理解 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/
1. 引子 在项目开发过程中,有一些数据在写入时候,若已经存在,则覆盖即可。这样可以防止多次重复写入唯一键冲突报错。下面先给出两个MyBatis配置文件中使用saveOrUpdate的示例 ins
我有一个名为客户的 hibernate 实体,其中包含有关客户的信息。在我的方法中,我将客户详细信息作为参数获取,我需要将其插入数据库。因此,要删除重复条目,我会检查该客户是否已存在于数据库中。但问题
我尝试在 hibernate 中使用 saveorupdate 方法,结果是 com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViola
我正在尝试做这样的方法,错误出现了并发问题..似乎我的更新方法没有增加我实体的@Version属性。 我的代码是这样的: @Transactional public B sav
saveOrUpdate() does the following: •if the object is already persistent in this session, do nothing
我尝试使用以下代码插入或更新数据库记录: Category category = new Category(); category.setName('catName'); category.setId
我正在通过以下链接使用 struts2 和 hibernate 集成 http://www.tutorials4u.net/struts2-tutorial/struts2_crud_example.
我正在尝试使用 Hibernate 插入或更新大数据。我有一个包含 350k 个对象的列表,当我使用 Hibernate saveOrUpdate() 时,需要几个小时才能插入所有数据。 我使用下面的
当使用 saveOrUpdate 创建一个新的 ebject 时,hibernate 将对象存储在数据库中并正确返回它。但是在同一方法调用中会创建一个带有一些空列的附加对象。 数据库中的对象如下所示:
@SuppressWarnings("unchecked") //@Override public SerialNumber getCounter(String id) { Session c
我的表有 2 个字段 id - 唯一、NotNull 和 Seq 名称 - Varchar 在空表上,我将记录发送为id = 1(手动填写id值) 名称 = '样本' 我使用 saveOrUpdate
我有 2 个双向映射的表,如下 @Entity @Table(name="testplan") public class TestPlan { @Id @Column(name="te
虽然我已经能够找到有关 Hibernate 事务如何工作的信息,因此数据库不会损坏,但更难理解 Hibernate 如何处理在线程之间共享的对象,并且每个线程都尝试将其保存到数据库。 这是我的理论问题
我有一个 Journal 类,它有一个 JournalLine 对象的 IList。 我创建了一个 Journal 并意外地通过相同的行生成方法运行了两次。此方法的开头调用 _journalLines
我正在尝试使用 Hibernate 中的 session.saveOrUpdate() 方法更新表格行。 但是,它无法更新该行并尝试通过生成插入语句来保存它。由于我的数据库中有一些不可为 null 的
我有一个名为 IssueParticipant 的 Hibernate 实体。它基本上描述了用户和问题(类似于 JIRA 或 Bugzilla 问题)之间的关系。它代表数据库中的一种多对多链接表,将用
我创建了一个名为“gauge_category”的表,它只有一个字段“gauge_category_id”是主键,数据类型是可变字符。我尝试了 CRUD 操作。创建、读取、删除操作完美运行。当我更新时
我正在使用 mysql 和 hibernate 在表中插入和更新行。我使用 saveOrUpdate 调用。现在,当我尝试更新表中的一行时,出现异常。异常指出我的列 requestTime 不能为空。
我正在使用 spring 来维护我应用程序中的事务。我想在数据库中保存新的并更新现有的用户详细信息。但是我无法更新对数据库的更改。查看我下面的代码并告诉我我的代码做错了什么? Session ses
我正在尝试使用父对象上的 saveOrUpdate 函数从 Hibernate Java 对象的集合中删除一个项目。更新和插入工作正常,但对象未正确删除。 saveOrUpdate() 是否能够识别和
我是一名优秀的程序员,十分优秀!