/** INTERNAL: Build and return a new element based on the specified element. */ public Object buildElementFromElement(Object element, MergeManager mergeManager) { if (this.shouldMergeCascadeParts(mergeManager)) { ObjectChangeSet objectChangeSet = null; if (mergeManager.getSession().isUnitOfWork()) { UnitOfWorkChangeSet uowChangeSet = (UnitOfWorkChangeSet) ((UnitOfWorkImpl) mergeManager.getSession()).getUnitOfWorkChangeSet(); if (uowChangeSet != null) { objectChangeSet = (ObjectChangeSet) uowChangeSet.getObjectChangeSetForClone(element); } } Object mergeElement = mergeManager.getObjectToMerge(element); mergeManager.mergeChanges(mergeElement, objectChangeSet); } return mergeManager.getTargetVersionOfSourceObject(element); }