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

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

Introduction

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

Prototype

public Object getOriginal() 

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  ww .  j  a  v  a 2s.com
@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()) {//  w  w w.j a  va 2  s.  c  om
            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.granite.tide.hibernate4.HibernateDataChangeMergeListener.java

License:Open Source License

@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);//  w ww.j ava2 s .  c om
        return;
    }

    try {
        wrappedListener.onMerge(event);
    } catch (StaleObjectStateException e) {
        HibernateOptimisticLockException.rethrowOptimisticLockException(event.getSession(), e);
    }
}

From source file:org.granite.tide.hibernate4.HibernateDataChangeMergeListener.java

License:Open Source License

@SuppressWarnings("rawtypes")
@Override//  w  w  w. jav a2s. com
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);
    }
}