Hibernate中merge、saveOrUpdate、save、persist

来源:互联网 发布:pl2303hx mac驱动 编辑:程序博客网 时间:2024/05/17 13:06

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方法相同

原创粉丝点击