arj*_*soh 8 database persistence hibernate
我正在努力理解hibernate方法之间的细微差别
saveOrUpdate - update - save/persist.
我知道网站上有一些类似的问题:
save和saveOrUpdate方法之间的区别是hibernate
但是看过它们之后,我没有注意到答案涵盖了在任何情况下使用这些方法产生的所有问题.我想提一下我创建的测试示例:我有一个带有记录的表USER:
id | company
1 Company1
2 Company2
Run Code Online (Sandbox Code Playgroud)
然后执行代码:
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();
Run Code Online (Sandbox Code Playgroud)
我在数据库中看到:
id | company
1 Company3
2 Company4
Run Code Online (Sandbox Code Playgroud)
我注意到save并且persist在这种情况下执行与saveOrUpdate或相同的任务.update因此,我的问题是什么是它们之间的差异以及何时saveOrUpdate或update必要.我说得对,与save或persist不更新相关的对象,即使使用Cascade?
JB *_*zet 14
双方save()并persist()用来插入一个新的数据库中的实体.您在数据库中已存在的实体上调用它们.所以他们什么都不做.
它们之间的主要区别在于save()Hibernate专有,而persist()标准的JPA方法.此外,save()保证为实体分配和返回ID,而persist()不是.
update() 用于将分离的实体附加到会话.
saveOrUpdate() 用于根据实体的状态(新的或分离的)保存或更新实体.
请注意,您无需调用会话的任何方法来修改附加实体:执行
User user1 = (User) session.load(User.class, Integer.valueOf(1));
user1.setCompany("Company3");
Run Code Online (Sandbox Code Playgroud)
足以让数据库中的用户1的公司更新.Hibernate检测对附加实体所做的更改,并自动将它们保存在数据库中.
小智 5
save 方法将对象存储到数据库中。这意味着如果标识符不存在,它将插入一个条目,否则将引发错误。如果表中已经存在主键,则无法将其插入。
update 休眠中的Update方法用于使用标识符更新对象。如果标识符丢失或不存在,它将引发异常。
saveOrUpdate 此方法根据操作调用save()或update()。如果标识符存在,它将调用update方法,否则将调用save方法。saveOrUpdate()方法执行以下操作:如果该对象在当前会话中已经存在,则不执行任何操作。如果与该会话关联的另一个对象具有相同的标识符,则将异常抛出给调用方。如果该对象没有标识符属性,则save( )对象如果对象的标识符具有分配给新实例化的对象的值,请保存()该对象-有关更多信息,请参见:http : //www.javabeat.net/difference-between-hibernates-saveupdate-and-saveorupdate-methods /#sthash.ZwqNlWXH.dpuf
| 归档时间: |
|
| 查看次数: |
23291 次 |
| 最近记录: |