OnReplicateVisitorpublic 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 |
Fields Summary |
---|
private boolean | isUpdate |
Methods Summary |
---|
java.lang.Object | processCollection(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;
|
|