public void evictCollection(Object value, CollectionType type) {

    final Object pc;
    if (type.hasHolder(getSession().getEntityMode())) {
      pc = getSession().getPersistenceContext().removeCollectionHolder(value);
    } else if (value instanceof PersistentCollection) {
      pc = value;
    } else {
      return; // EARLY EXIT!
    }

    PersistentCollection collection = (PersistentCollection) pc;
    if (collection.unsetSession(getSession())) evictCollection(collection);
  }
  Object processCollection(Object collection, CollectionType type) throws HibernateException {

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

    if (collection != null) {
      final PersistentCollection coll;
      if (type.hasHolder()) {
        coll = getSession().getPersistenceContext().getCollectionHolder(collection);
      } else {
        coll = (PersistentCollection) collection;
      }

      Collections.processReachableCollection(coll, type, owner, getSession());
    }

    return null;
  }