protected void persistNode(final Object copy, final MultiTenantCopyContext context) { if (!genericEntityService.sessionContains(copy) && !genericEntityService.idAssigned(copy)) { final Object original = genericEntityService.readGenericEntity(copy.getClass().getName(), context.removeOriginalIdentifier(copy)); extensionManager.getProxy().transformCopy(context, original, copy); extensionManager.getProxy().prepareForSave(context, original, copy); IdentityExecutionUtils.runOperationByIdentifier(new IdentityOperation<Void, RuntimeException>() { @Override public Void execute() { genericEntityService.persist(copy); extensionManager.getProxy().postSave(context, original, copy); return null; } }, context.getToSite(), context.getToSite(), context.getToCatalog()); context.storeEquivalentMapping(original.getClass().getName(), context.getIdentifier(original), context.getIdentifier(copy)); } }