我很难理解hibernate方法之间的细微差异
CCD_ 1。
我知道网站上有一些类似的问题:
Hibernate中不同的保存方法有什么区别?
save和saveOrUpdate方法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
执行相同的任务。因此,我的问题是它们之间的区别是什么,saveOrUpdate
或update
何时是必要的。使用save
或persist
,即使使用saveOrUpdate - update - save/persist
0,相关对象也不会更新,我说得对吗?
save()
和persist()
都用于在数据库中插入新的实体。您在数据库中已经存在的实体上调用它们。所以他们什么都不做。
它们之间的主要区别在于save()
是Hibernate专有的,而persist()
是标准的JPA方法。此外,保证save()
为实体分配并返回ID,而persist()
则不然。
CCD_ 17用于将分离的实体附加到会话。
saveOrUpdate()
用于根据实体的状态(新的或分离的)来保存或更新实体。
请注意,您不需要调用会话的任何方法来修改附加的实体:执行
User user1 = (User) session.load(User.class, Integer.valueOf(1));
user1.setCompany("Company3");
足以在数据库中更新用户1的公司。Hibernate检测对附加实体所做的更改,并自动将其保存在数据库中。
保存Save方法将对象存储到数据库中。这意味着如果标识符不存在,它将插入一个条目,否则它将抛出错误。如果表中已存在主键,则无法插入该主键。
更新hibernate中的Update方法用于使用标识符更新对象。如果标识符丢失或不存在,它将引发异常。
保存或更新此方法根据操作调用save()或update()。如果标识符存在,它将调用update方法,否则将调用save方法。saveOrUpdate()方法执行以下操作:如果对象已在当前会话中持久化,则它将不执行任何操作如果与会话关联的另一个对象具有相同的标识符,则向调用方抛出异常如果对象没有标识符属性,请保存()对象如果对象的标识符具有分配给新实例化对象的值,则保存()对象-更多信息,请访问:http://www.javabeat.net/difference-between-hibernates-saveupdate-and-saveorupdate-methods/#sthash.ZwqNlWXH.dpuf
saveOrUpdate
-如果数据库中不存在行,则插入该行;如果存在,则更新该行。
save
-始终尝试将一行插入数据库。
update
-始终尝试更新数据库中的一行。使用saveOrUpdate
。
假设你开发了一个程序,从谷歌分析中获取当天用户访问的信息,并将其保存到你的数据库中。
如果数据库中没有关于当天的信息,方法saveOrUpdate
将插入数据,否则将更新现有数据。