Example usage for org.hibernate.type CollectionType wrap

List of usage examples for org.hibernate.type CollectionType wrap

Introduction

In this page you can find the example usage for org.hibernate.type CollectionType wrap.

Prototype

public abstract PersistentCollection wrap(SharedSessionContractImplementor session, Object collection);

Source Link

Document

Wrap the naked collection instance in a wrapper, or instantiate a holder.

Usage

From source file:owldb.util.OWLDBEventListener.java

License:Open Source License

/**
 * Reassociate an Object to the Session provided.
 * /*from   w  ww  .j  ava2  s.c o 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);
}