test表中有id(pk)和name两个字段
1.saveOrUpdate(pojo)
private void testSaveOrUpdate(){
Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction();
Test test = new Test();
test.setName("pingqc1");
session.saveOrUpdate(test);
test.setName("pingqc2");
tx.commit();
session.close();
}对于一个test对象先saveOrUpdate, 然后再修改test的name属性,最后事物提交。执行后可以在控制台看到两句hql语句:
Hibernate: insert into test.test (name) values (?)
Hibernate: update test.test set name=? where id=?也就是说test经过saveOrUpdate后,进入持久化状态
2.save(pojo)
同上,根据函数名可以知道如果test对象开始就已经存在,则执行两次update语句
3.merge(pojo)
private void testMerge() {
Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction();
Test test = new Test();
test.setName("pingqc11");
session.merge(test);
test.setName("pingqc22");
tx.commit();
session.close();
}对于merge,修改test后并没有将其写入数据库,所以,merge操作后test处于托管状态4.persist(pojo)
还未深究,从表面看来与save方法相同

本文详细解析了Hibernate中四种常见操作:saveOrUpdate、save、merge及persist的功能差异与应用场景,并通过实例展示了每种方法如何影响对象的状态。
675

被折叠的 条评论
为什么被折叠?



