hibernate merge() replicate() 方法解释

这个方法都是hibernate 的保存方法

merge() :

1.如果对象的idertifier(以下简称为id)为空或在数据库不存在,则进行inert动作(此时如果对象的id有值也 将被hibernate自动生成的ID覆盖)
2.如果id存在,则进行update动作

replicate() :

Persist the state of the given detached instance, reusing the current identifier value

使用背景:

假设你的对象的ID是用hibernate 负责生成的,但现在你想在数据库中插入一条已经指定ID的记录,

如果你用save() 不会报异常,但它会生成一条由hibernate生成的ID 的记录

如果你用merge() 跟用save 一样

如果用saveOrUpdate 如果数据库中不存在你指定的ID 则不会发生操作,如果存在,则会修改数据库的记录,而不是重新生成一条新记录

如果用persist() 会报异常。

哈哈 最后只剩下 replicate() 方法了

rereplicate()会完成你心愿!

注意: 此时 ID 的生成策略 是 uuid.hex     再 oracle10g 和 sql2000 上都经过测试。

            别的生成策略在不同数据库上可能有问题,尤其像 native 等 由数据库管理生成ID 的

示例代码:

MyObject myobj = new MyObject();
myobj.setId("encodinglife")
myobj.setOtherData("foobar");
hsession.replicate(myobj, ReplicationMode.EXCEPTION);

/**

ReplicationMode 的其他值

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值