我正在努力理解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
我注意到在这种情况下保存和持久执行与saveOrUpdate或update相同的任务.因此,问题是它们之间的差异是什么以及何时需要saveOrUpdate或更新.我是对的,即使使用Cascade,保存或持久化相关对象也不会更新?
解决方法
save()和persist()都用于在数据库中插入新实体.您在数据库中已存在的实体上调用它们.所以他们什么都不做.
它们之间的主要区别在于save()是Hibernate专有的,而persist()是标准的JPA方法.此外,save()保证为实体分配和返回ID,而persist()则不然.
update()用于将分离的实体附加到会话.
saveOrUpdate()用于根据实体的状态(新的或分离的)保存或更新实体.
User user1 = (User) session.load(User.class,Integer.valueOf(1)); user1.setCompany("Company3");