Open Source Repository

Home /hibernate/hibernate-3.2.6.ga | Repository Home


org/hibernate/loader/collection/SubselectCollectionLoader.java
//$Id: SubselectCollectionLoader.java 7670 2005-07-29 05:36:14Z oneovthafew $
package org.hibernate.loader.collection;

import java.io.Serializable;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;

import org.hibernate.HibernateException;
import org.hibernate.MappingException;
import org.hibernate.engine.EntityKey;
import org.hibernate.engine.QueryParameters;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.engine.SessionImplementor;
import org.hibernate.persister.collection.QueryableCollection;
import org.hibernate.type.Type;

/**
 * Implements subselect fetching for a collection
 @author Gavin King
 */
public class SubselectCollectionLoader extends BasicCollectionLoader {
  
  private final Serializable[] keys;
  private final Type[] types;
  private final Object[] values;
  private final Map namedParameters;
  private final Map namedParameterLocMap;

  public SubselectCollectionLoader(
      QueryableCollection persister, 
      String subquery,
      Collection entityKeys,
      QueryParameters queryParameters,
      Map namedParameterLocMap,
      SessionFactoryImplementor factory, 
      Map enabledFilters)
  throws MappingException {
    
    super(persister, 1, subquery, factory, enabledFilters);

    keys = new SerializableentityKeys.size() ];
    Iterator iter = entityKeys.iterator();
    int i=0;
    while iter.hasNext() ) {
      keys[i++( (EntityKeyiter.next() ).getIdentifier();
    }
    
    this.namedParameters = queryParameters.getNamedParameters();
    this.types = queryParameters.getFilteredPositionalParameterTypes();
    this.values = queryParameters.getFilteredPositionalParameterValues();
    this.namedParameterLocMap = namedParameterLocMap;
    
  }

  public void initialize(Serializable id, SessionImplementor session)
  throws HibernateException {
    loadCollectionSubselect
        session, 
        keys, 
        values,
        types,
        namedParameters,
        getKeyType() 
      );
  }

  public int[] getNamedParameterLocs(String name) {
    return (int[]) namedParameterLocMap.getname );
  }

}