这个方法都是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);