FileDocCategorySizeDatePackage
OnReplicateVisitor.javaAPI DocHibernate 3.2.52107Thu Dec 07 14:53:42 GMT 2006org.hibernate.event.def

OnReplicateVisitor

public class OnReplicateVisitor extends ReattachVisitor
When an entity is passed to replicate(), and there is an existing row, we must inspect all its collections and 1. associate any uninitialized PersistentCollections with this session 2. associate any initialized PersistentCollections with this session, using the existing snapshot 3. execute a collection removal (SQL DELETE) for each null collection property or "new" collection
author
Gavin King

Fields Summary
private boolean
isUpdate
Constructors Summary
OnReplicateVisitor(org.hibernate.event.EventSource session, Serializable key, Object owner, boolean isUpdate)

		super( session, key, owner );
		this.isUpdate = isUpdate;
	
Methods Summary
java.lang.ObjectprocessCollection(java.lang.Object collection, org.hibernate.type.CollectionType type)


		if ( collection == CollectionType.UNFETCHED_COLLECTION ) {
			return null;
		}

		EventSource session = getSession();
		CollectionPersister persister = session.getFactory().getCollectionPersister( type.getRole() );

		if ( isUpdate ) {
			removeCollection( persister, extractCollectionKeyFromOwner( persister ), session );
		}
		if ( collection != null && ( collection instanceof PersistentCollection ) ) {
			PersistentCollection wrapper = ( PersistentCollection ) collection;
			wrapper.setCurrentSession( session );
			if ( wrapper.wasInitialized() ) {
				session.getPersistenceContext().addNewCollection( persister, wrapper );
			}
			else {
				reattachCollection( wrapper, type );
			}
		}
		else {
			// otherwise a null or brand new collection
			// this will also (inefficiently) handle arrays, which
			// have no snapshot, so we can't do any better
			//processArrayOrNewCollection(collection, type);
		}

		return null;