final EventSource source = event.getSession(); final Object original = event.getOriginal(); if ( li.isUninitialized() ) { LOG.trace( "Ignoring uninitialized proxy" ); event.setResult( source.load( li.getEntityName(), li.getIdentifier() ) ); return; //EARLY EXIT! ( copyCache.isOperatedOn( entity ) ) ) { LOG.trace( "Already in merge process" ); event.setResult( entity ); copyCache.setOperatedOn( entity, true ); event.setEntity( entity ); EntityState entityState = null; EntityPersister persister = source.getEntityPersister( event.getEntityName(), entity ); Serializable id = persister.getIdentifier( entity, source ); if ( id != null ) { entityState = getEntityState( entity, event.getEntityName(), entry, source ); "deleted instance passed to merge", null, getLoggableName( event.getEntityName(), entity ) );
private Object fireMerge(MergeEvent event) { try { checkTransactionSynchStatus(); checkNoUnresolvedActionsBeforeOperation(); for ( MergeEventListener listener : listeners( EventType.MERGE ) ) { listener.onMerge( event ); } checkNoUnresolvedActionsAfterOperation(); } catch ( ObjectDeletedException sse ) { throw exceptionConverter.convert( new IllegalArgumentException( sse ) ); } catch ( MappingException e ) { throw exceptionConverter.convert( new IllegalArgumentException( e.getMessage(), e ) ); } catch ( RuntimeException e ) { //including HibernateException throw exceptionConverter.convert( e ); } return event.getResult(); }
@Override public void merge(String entityName, Object object, Map copiedAlready) throws HibernateException { checkOpenOrWaitingForAutoClose(); fireMerge( copiedAlready, new MergeEvent( entityName, object, this ) ); }
protected void entityIsPersistent(MergeEvent event, Map copyCache) { LOG.trace( "Ignoring persistent instance" ); //TODO: check that entry.getIdentifier().equals(requestedId) final Object entity = event.getEntity(); final EventSource source = event.getSession(); final EntityPersister persister = source.getEntityPersister( event.getEntityName(), entity ); ( (MergeContext) copyCache ).put( entity, entity, true ); //before cascade! cascadeOnMerge( source, persister, entity, copyCache ); copyValues( persister, entity, entity, source, copyCache ); event.setResult( entity ); }
@Override public void onMerge(MergeEvent event) throws HibernateException { if (event.getOriginal() instanceof ChangeSetProxy || event.getOriginal() instanceof ChangeSet) { ChangeSet changeSet = event.getOriginal() instanceof ChangeSet ? (ChangeSet)event.getOriginal() : ((ChangeSetProxy)event.getOriginal()).getChangeSetProxyData(); Object result = new ChangeSetApplier(new HibernatePersistenceAdapter(event.getSession())).applyChanges(changeSet)[0]; event.setResult(result); return; } try { wrappedListener.onMerge(event); } catch (StaleObjectStateException e) { HibernateOptimisticLockException.rethrowOptimisticLockException(event.getSession(), e); } }
protected void afterMerge(MergeEvent event) { Object original = event.getOriginal(); Object result = event.getResult();
/** * Handle the given merge event. * * @param event The merge event to be handled. * * @throws HibernateException */ public void onMerge(MergeEvent event) throws HibernateException { final EntityCopyObserver entityCopyObserver = createEntityCopyObserver( event.getSession().getFactory() ); final MergeContext mergeContext = new MergeContext( event.getSession(), entityCopyObserver ); try { onMerge( event, mergeContext ); entityCopyObserver.topLevelMergeComplete( event.getSession() ); } finally { entityCopyObserver.clear(); mergeContext.clear(); } }
@Override public void onMerge(MergeEvent event) { IPreUpdateHandler handler = IPreUpdateHandler.class.cast(event.getOriginal()); handler.onPreUpdate(); }
protected void entityIsTransient(MergeEvent event, Map copyCache) { LOG.trace( "Merging transient instance" ); final Object entity = event.getEntity(); final EventSource source = event.getSession(); final String entityName = event.getEntityName(); final EntityPersister persister = source.getEntityPersister( entityName, entity ); final Serializable id = persister.hasIdentifierProperty() ? persister.getIdentifier( entity, source ) : null; if ( copyCache.containsKey( entity ) ) { persister.setIdentifier( copyCache.get( entity ), id, source ); } else { ( (MergeContext) copyCache ).put( entity, source.instantiate( persister, id ), true ); //before cascade! } final Object copy = copyCache.get( entity ); // cascade first, so that all unsaved objects get their // copy created before we actually copy //cascadeOnMerge(event, persister, entity, copyCache, Cascades.CASCADE_BEFORE_MERGE); super.cascadeBeforeSave( source, persister, entity, copyCache ); copyValues( persister, entity, copy, source, copyCache, ForeignKeyDirection.FROM_PARENT ); saveTransientEntity( copy, entityName, event.getRequestedId(), source, copyCache ); // cascade first, so that all unsaved objects get their // copy created before we actually copy super.cascadeAfterSave( source, persister, entity, copyCache ); copyValues( persister, entity, copy, source, copyCache, ForeignKeyDirection.TO_PARENT ); event.setResult( copy ); }
@SuppressWarnings("rawtypes") @Override public void onMerge(MergeEvent event, Map copiedAlready) throws HibernateException { if (event.getOriginal() instanceof ChangeSetProxy || event.getOriginal() instanceof ChangeSet) { ChangeSet changeSet = event.getOriginal() instanceof ChangeSet ? (ChangeSet)event.getOriginal() : ((ChangeSetProxy)event.getOriginal()).getChangeSetProxyData(); Object result = new ChangeSetApplier(new HibernatePersistenceAdapter(event.getSession())).applyChanges(changeSet)[0]; event.setResult(result); return; } try { wrappedListener.onMerge(event, copiedAlready); } catch (StaleObjectStateException e) { HibernateOptimisticLockException.rethrowOptimisticLockException(event.getSession(), e); } } }
@SuppressWarnings("rawtypes") @Override public void onMerge(MergeEvent event, Map copiedAlready) throws HibernateException { try { wrappedListener.onMerge(event, copiedAlready); } catch (StaleObjectStateException e) { HibernateOptimisticLockException.rethrowOptimisticLockException(event.getSession(), e); } } }
@Override public void onMerge(MergeEvent event, Map copiedAlready) { IPreUpdateHandler handler = IPreUpdateHandler.class.cast(event.getOriginal()); handler.onPreUpdate(); } }
final Object entity = event.getEntity(); final EventSource source = event.getSession(); final EntityPersister persister = source.getEntityPersister( event.getEntityName(), entity ); final String entityName = persister.getEntityName(); Serializable id = event.getRequestedId(); if ( id == null ) { id = persister.getIdentifier( entity, source ); throw new WrongClassException( "class of the given object did not match class of persistent copy", event.getRequestedId(), entityName ); event.setResult( result );
final EventSource source = event.getSession(); final Object original = event.getOriginal(); if ( li.isUninitialized() ) { LOG.trace( "Ignoring uninitialized proxy" ); event.setResult( source.load( li.getEntityName(), li.getIdentifier() ) ); return; //EARLY EXIT! ( copyCache.isOperatedOn( entity ) ) ) { LOG.trace( "Already in merge process" ); event.setResult( entity ); copyCache.setOperatedOn( entity, true ); event.setEntity( entity ); EntityState entityState = null; EntityPersister persister = source.getEntityPersister( event.getEntityName(), entity ); Serializable id = persister.getIdentifier( entity, source ); if ( id != null ) { entityState = getEntityState( entity, event.getEntityName(), entry, source ); "deleted instance passed to merge", null, getLoggableName( event.getEntityName(), entity ) );
@Override public Object merge(String entityName, Object object) throws HibernateException { checkOpen(); return fireMerge( new MergeEvent( entityName, object, this ) ); }
private static void replaceBackReferenceToResult(MergeEvent event, AssociatedEndpoint backEndpoint) { if (backEndpoint.isDisabled() || !backEndpoint.isLoaded()) { return; } Reference<?> reference = (Reference<?>)backEndpoint; if (reference.get(true) == event.getResult()) { return; } Method hibernateSetMethod; if (backEndpoint instanceof EntityKeyedReference<?, ?>) { hibernateSetMethod = ENTITY_KEYED_REFERENCE_HIBERNATE_SET; } else if (backEndpoint instanceof EntityIndexedReference<?>) { hibernateSetMethod = ENTITY_INDEXED_REFERENCE_HIBERNATE_SET; } else { hibernateSetMethod = ENTITY_REFERENCE_HIBERNATE_SET; } try { hibernateSetMethod.invoke(backEndpoint, event.getResult()); } catch (IllegalAccessException ex) { throw new AssertionError("Internal bug", ex); } catch (InvocationTargetException ex) { UncheckedException.rethrow(ex.getTargetException()); } }
@Override public void onMerge(MergeEvent event) throws HibernateException { try { wrappedListener.onMerge(event); } catch (StaleObjectStateException e) { HibernateOptimisticLockException.rethrowOptimisticLockException(event.getSession(), e); } }
protected void entityIsPersistent(MergeEvent event, Map copyCache) { LOG.trace( "Ignoring persistent instance" ); //TODO: check that entry.getIdentifier().equals(requestedId) final Object entity = event.getEntity(); final EventSource source = event.getSession(); final EntityPersister persister = source.getEntityPersister( event.getEntityName(), entity ); ( ( EventCache ) copyCache ).put( entity, entity, true ); //before cascade! cascadeOnMerge(source, persister, entity, copyCache); copyValues(persister, entity, entity, source, copyCache); event.setResult(entity); }
final EventSource source = event.getSession(); final Object original = event.getOriginal(); if ( li.isUninitialized() ) { LOG.trace( "Ignoring uninitialized proxy" ); event.setResult( source.load( li.getEntityName(), li.getIdentifier() ) ); return; //EARLY EXIT! ( copyCache.isOperatedOn( entity ) ) ) { LOG.trace( "Already in merge process" ); event.setResult( entity ); copyCache.setOperatedOn( entity, true ); event.setEntity( entity ); EntityState entityState = null; EntityPersister persister = source.getEntityPersister( event.getEntityName(), entity ); Serializable id = persister.getIdentifier( entity, source ); if ( id != null ) { entityState = getEntityState( entity, event.getEntityName(), entry, source ); "deleted instance passed to merge", null, getLoggableName( event.getEntityName(), entity ) );
@Override public Object merge(Object object) throws HibernateException { checkOpen(); return fireMerge( new MergeEvent( null, object, this )); }