我正在数据库中存储一个相对复杂的不可变对象。有许多多对一关联-对象具有具有具有属性的属性,等等。
工作流程如下:
-
用户创建复杂对象。这可能需要很长时间,代码到处都是。
-
我查询数据库,查看以前是否已经存储了完全相同的对象:
-
如果不是,
save
-
如果是,请设置对象的id和
merge
问题是冬眠
有相当不方便的语义:
transientObject = createComplexTransientObject();
mergedObject = session.merge(transientObject);
// here you have to discard transientObject
// use mergedObject from now on
创建的对象必须被丢弃并替换为Hibernate提供的对象,这意味着我必须更新对它的所有引用。
我需要一种方法告诉hibernate:“这个全新的transiento对象似乎与数据库中已经存在的对象完全相同。把它合并在一起。”换句话说:
object = createComplexTransientObject();
session.inPlaceMerge(object);
// object is now persistent
我怎样才能做到?