hiberante 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);

你可能感兴趣的:(Hibernate,replicate)