Hibernate中merge、saveOrUpdate、save、persist

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值