Example usage for org.hibernate.event.spi MergeEvent getResult

List of usage examples for org.hibernate.event.spi MergeEvent getResult

Introduction

In this page you can find the example usage for org.hibernate.event.spi MergeEvent getResult.

Prototype

public Object getResult() 

Source Link

Usage

From source file:it.cilea.core.spring.dao.hibernate.IdTransferringMergeEventListener.java

License:Apache License

/**
 * Hibernate 3.1 implementation of ID transferral.
 *//*from   w w w.j  a va 2  s.co m*/
@Override
protected void entityIsTransient(MergeEvent event, Map copyCache) {
    super.entityIsTransient(event, copyCache);
    SessionImplementor session = event.getSession();
    EntityPersister persister = session.getEntityPersister(event.getEntityName(), event.getEntity());
    // Extract id from merged copy (which is currently registered with
    // Session).
    Serializable id = persister.getIdentifier(event.getResult(), session);
    // Set id on original object (which remains detached).
    persister.setIdentifier(event.getOriginal(), id, session);
}

From source file:org.babyfish.hibernate.event.ObjectModelMergeEventListener.java

License:Open Source License

protected void afterMerge(MergeEvent event) {
    Object original = event.getOriginal();
    Object result = event.getResult();

    //Merged transient or detached object with ObjectModel.
    if (original != result && Metadatas.has(original.getClass())) {
        JPAObjectModelMetadata objectModelMetadata = JPAMetadatas.of(original.getClass());
        ObjectModel objectModel = (ObjectModel) objectModelMetadata.getFactory().get(original);
        for (AssociationProperty associationProperty : objectModelMetadata.getAssociationProperties()
                .values()) {//from ww  w.  j  a v  a  2 s  .  co  m
            AssociationProperty oppositeProperty = associationProperty.getOppositeProperty();
            if (oppositeProperty == null || !oppositeProperty.isReference()) {
                continue;
            }
            AssociatedEndpoint<?, ?> associatedEndpoint = objectModel
                    .getAssociation(associationProperty.getId());
            if (associatedEndpoint.isDisabled() || !associatedEndpoint.isLoaded()) {
                continue;
            }
            ObjectModelFactory<?> elementObjectModelFactory = oppositeProperty.getDeclaringObjectModelMetadata()
                    .getFactory();
            int oppositePropertyId = oppositeProperty.getId();
            if (associatedEndpoint instanceof Collection<?>) {
                for (Object o : (Collection<?>) associatedEndpoint) {
                    if (o != null) {
                        ObjectModel elementObjectModel = (ObjectModel) elementObjectModelFactory.get(o);
                        replaceBackReferenceToResult(event,
                                elementObjectModel.getAssociation(oppositePropertyId));
                    }
                }
            } else if (associatedEndpoint instanceof Map<?, ?>) {
                for (Object o : ((Map<?, ?>) associatedEndpoint).values()) {
                    if (o != null) {
                        ObjectModel elementObjectModel = (ObjectModel) elementObjectModelFactory.get(o);
                        replaceBackReferenceToResult(event,
                                elementObjectModel.getAssociation(oppositePropertyId));
                    }
                }
            } else {
                Object o = ((Reference<?>) associatedEndpoint).get();
                if (o != null) {
                    ObjectModel elementObjectModel = (ObjectModel) elementObjectModelFactory.get(o);
                    replaceBackReferenceToResult(event, elementObjectModel.getAssociation(oppositePropertyId));
                }
            }
        }
    }
}

From source file:org.babyfish.hibernate.event.ObjectModelMergeEventListener.java

License:Open Source License

private static void replaceBackReferenceToResult(MergeEvent event, AssociatedEndpoint<?, ?> backEndpoint) {
    if (backEndpoint.isDisabled() || !backEndpoint.isLoaded()) {
        return;//from   w  w  w  . jav a 2  s. c om
    }

    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());
    }
}