Example usage for org.hibernate.persister.entity EntityPersister afterReassociate

List of usage examples for org.hibernate.persister.entity EntityPersister afterReassociate

Introduction

In this page you can find the example usage for org.hibernate.persister.entity EntityPersister afterReassociate.

Prototype

void afterReassociate(Object entity, SharedSessionContractImplementor session);

Source Link

Document

Called just after the entity has been reassociated with the session

Usage

From source file:owldb.util.OWLDBEventListener.java

License:Open Source License

/**
 * Reassociate an Object to the Session provided.
 * /*from   w w  w. ja v a 2s  .  co m*/
 * @param source The session implementor source
 * @param object Worked object
 * @param result The loaded object
 * @param status The Hibernate status
 */
private void reassociateObject(final SessionImplementor source, final Object object, final Object result,
        final Status status) {
    final Serializable id = result instanceof OWLObject ? this.getID(source, (OWLObject) result)
            : source.getContextEntityIdentifier(result);
    if (id == null)
        return;

    final EntityPersister persister = source.getEntityPersister(null, object);
    final EntityMode entityMode = source.getEntityMode();
    final EntityKey key = new EntityKey(id, persister, entityMode);

    // Get a snapshot
    final Type[] types = persister.getPropertyTypes();
    final Object[] resultValues = persister.getPropertyValues(result, entityMode);
    final Object[] values = persister.getPropertyValues(object, entityMode);

    if (persister.hasCollections()) {
        for (int i = 0; i < types.length; i++) {
            if (!types[i].isCollectionType())
                continue;

            if (values[i] instanceof Collection<?>) {
                final Collection<?> unsavedCol = (Collection<?>) values[i];
                final CollectionType collectionType = (CollectionType) types[i];
                final CollectionPersister colPersister = source.getFactory()
                        .getCollectionPersister(collectionType.getRole());
                final PersistenceContext persistenceContext = source.getPersistenceContext();
                final PersistentCollection persistentCollection = collectionType.wrap(source, unsavedCol);
                final PersistentCollection resultCol = (PersistentCollection) resultValues[i];
                final Serializable currentKey = resultCol.getKey();
                persistenceContext.addInitializedCollection(colPersister, persistentCollection, currentKey);
                values[i] = persistentCollection;
            }

            persister.setPropertyValues(object, values, entityMode);
        }
    }

    TypeHelper.deepCopy(values, types, persister.getPropertyUpdateability(), values, source);
    final Object version = Versioning.getVersion(values, persister);

    // lazyPropertiesAreUnfetched: Will be ignored, using the existing Entry
    // instead
    source.getPersistenceContext().addEntity(object, status, values, key, version, LockMode.NONE, true,
            persister, false, true);
    persister.afterReassociate(object, source);
}