/** * Get the collection entry for a collection passed to filter, * which might be a collection wrapper, an array, or an unwrapped * collection. Return null if there is no entry. */ public CollectionEntry getCollectionEntryOrNull(Object collection) { PersistentCollection coll; if ( collection instanceof PersistentCollection ) { coll = (PersistentCollection) collection; //if (collection==null) throw new TransientObjectException("Collection was not yet persistent"); } else { coll = getCollectionHolder(collection); if ( coll == null ) { //it might be an unwrapped collection reference! //try to find a wrapper (slowish) Iterator wrappers = IdentityMap.keyIterator(collectionEntries); while ( wrappers.hasNext() ) { PersistentCollection pc = (PersistentCollection) wrappers.next(); if ( pc.isWrapper(collection) ) { coll = pc; break; } } } } return (coll == null) ? null : getCollectionEntry(coll); }
Object processCollection(Object collection, CollectionType type) throws HibernateException { if (collection!=null) { SessionImplementor session = getSession(); final PersistentCollection persistentCollection; if ( type.isArrayType() ) { persistentCollection = session.getPersistenceContext().getCollectionHolder(collection); // if no array holder we found an unwrappered array (this can't occur, // because we now always call wrap() before getting to here) // return (ah==null) ? true : searchForDirtyCollections(ah, type); } else { // if not wrappered yet, its dirty (this can't occur, because // we now always call wrap() before getting to here) // return ( ! (obj instanceof PersistentCollection) ) ? //true : searchForDirtyCollections( (PersistentCollection) obj, type ); persistentCollection = (PersistentCollection) collection; } if ( persistentCollection.isDirty() ) { //we need to check even if it was not initialized, because of delayed adds! dirty=true; return null; //NOTE: EARLY EXIT! } } return null; }
Object processCollection(Object collection, CollectionType type) throws HibernateException { if (collection==CollectionType.UNFETCHED_COLLECTION) { return null; } if (collection!=null) { final PersistentCollection coll; if ( type.hasHolder( getSession().getEntityMode() ) ) { coll = getSession().getPersistenceContext().getCollectionHolder(collection); } else { coll = (PersistentCollection) collection; } Collections.processReachableCollection( coll, type, owner, getSession() ); } return null; }
Object processCollection(Object collection, CollectionType type) throws HibernateException { if (collection==CollectionType.UNFETCHED_COLLECTION) { return null; } if (collection!=null) { final PersistentCollection coll; if ( type.hasHolder( getSession().getEntityMode() ) ) { coll = getSession().getPersistenceContext().getCollectionHolder(collection); } else { coll = (PersistentCollection) collection; } Collections.processReachableCollection( coll, type, owner, getSession() ); } return null; }
Object processCollection(Object collection, CollectionType type) throws HibernateException { if (collection!=null) { SessionImplementor session = getSession(); final PersistentCollection coll; if ( type.isArrayType() ) { coll = session.getPersistenceContext().getCollectionHolder(collection); // if no array holder we found an unwrappered array (this can't occur, // because we now always call wrap() before getting to here) // return (ah==null) ? true : searchForDirtyCollections(ah, type); } else { // if not wrappered yet, its dirty (this can't occur, because // we now always call wrap() before getting to here) // return ( ! (obj instanceof PersistentCollection) ) ? //true : searchForDirtyCollections( (PersistentCollection) obj, type ); coll = (PersistentCollection) collection; } if ( session.getPersistenceContext().getCollectionEntry(coll).isInitializedAndDirty() ) { dirty=true; return null; //NOTE: EARLY EXIT! } } return null; }
final Object processArrayOrNewCollection(Object collection, CollectionType collectionType) throws HibernateException { final SessionImplementor session = getSession(); if (collection==null) { //do nothing return null; } else { CollectionPersister persister = session.getFactory().getCollectionPersister( collectionType.getRole() ); final PersistenceContext persistenceContext = session.getPersistenceContext(); //TODO: move into collection type, so we can use polymorphism! if ( collectionType.hasHolder( session.getEntityMode() ) ) { if (collection==CollectionType.UNFETCHED_COLLECTION) return null; PersistentCollection ah = persistenceContext.getCollectionHolder(collection); if (ah==null) { ah = collectionType.wrap(session, collection); persistenceContext.addNewCollection( ah, persister ); persistenceContext.addCollectionHolder(ah); } return null; } else { PersistentCollection persistentCollection = collectionType.wrap(session, collection); persistenceContext.addNewCollection( persistentCollection, persister ); if ( log.isTraceEnabled() ) log.trace( "Wrapped collection in role: " + collectionType.getRole() ); return persistentCollection; //Force a substitution! } } }
final Object processArrayOrNewCollection(Object collection, CollectionType collectionType) throws HibernateException { final SessionImplementor session = getSession(); if (collection==null) { //do nothing return null; } else { CollectionPersister persister = session.getFactory().getCollectionPersister( collectionType.getRole() ); final PersistenceContext persistenceContext = session.getPersistenceContext(); //TODO: move into collection type, so we can use polymorphism! if ( collectionType.hasHolder( session.getEntityMode() ) ) { if (collection==CollectionType.UNFETCHED_COLLECTION) return null; PersistentCollection ah = persistenceContext.getCollectionHolder(collection); if (ah==null) { ah = collectionType.wrap(session, collection); persistenceContext.addNewCollection( persister, ah ); persistenceContext.addCollectionHolder(ah); } return null; } else { PersistentCollection persistentCollection = collectionType.wrap(session, collection); persistenceContext.addNewCollection( persister, persistentCollection ); if ( log.isTraceEnabled() ) log.trace( "Wrapped collection in role: " + collectionType.getRole() ); return persistentCollection; //Force a substitution! } } }