Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or .
*/
package org.hibernate.loader.plan.exec.internal;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.loader.plan.exec.process.spi.ResultSetProcessorResolver;
import org.hibernate.loader.plan.exec.query.spi.QueryBuildingParameters;
import org.hibernate.loader.plan.exec.spi.LoadQueryDetails;
import org.hibernate.loader.plan.spi.CollectionReturn;
import org.hibernate.loader.plan.spi.EntityReturn;
import org.hibernate.loader.plan.spi.LoadPlan;
import org.hibernate.persister.collection.CollectionPersister;
import org.hibernate.persister.entity.Queryable;
/**
* A factory class for creating a {@link org.hibernate.loader.plan.exec.spi.LoadQueryDetails} object.
*/
public class BatchingLoadQueryDetailsFactory {
/**
* Singleton access
*/
public static final BatchingLoadQueryDetailsFactory INSTANCE = new BatchingLoadQueryDetailsFactory();
/**
* Private to disallow instantiation
*/
private BatchingLoadQueryDetailsFactory() {
}
/**
* Returns an EntityLoadQueryDetails object from the given inputs.
*
* @param loadPlan The load plan
* @param keyColumnNames The columns to load the entity by (the PK columns or some other unique set of columns)
* @param buildingParameters Any influencers that would affect the generated SQL (mostly we are concerned with those
* that add additional joins here)
* @param factory The SessionFactory
* @oaram resultSetProcessorResolver The ResultSet processor resolver.
*
* @return The EntityLoadQueryDetails
*/
public EntityLoadQueryDetails makeEntityLoadQueryDetails(
LoadPlan loadPlan,
String[] keyColumnNames,
QueryBuildingParameters buildingParameters,
SessionFactoryImplementor factory,
ResultSetProcessorResolver resultSetProcessorResolver) {
// TODO: how should shouldUseOptionalEntityInformation be used?
// final int batchSize = buildingParameters.getBatchSize();
// final boolean shouldUseOptionalEntityInformation = batchSize == 1;
final EntityReturn rootReturn = RootHelper.INSTANCE.extractRootReturn( loadPlan, EntityReturn.class );
final String[] keyColumnNamesToUse = keyColumnNames != null
? keyColumnNames
: ( (Queryable) rootReturn.getEntityPersister() ).getIdentifierColumnNames();
// Should be just one querySpace (of type EntityQuerySpace) in querySpaces. Should we validate that?
// Should we make it a util method on Helper like we do for extractRootReturn ?
final AliasResolutionContextImpl aliasResolutionContext = new AliasResolutionContextImpl( factory );
return new EntityLoadQueryDetails(
loadPlan,
keyColumnNamesToUse,
aliasResolutionContext,
rootReturn,
buildingParameters,
factory,
resultSetProcessorResolver
);
}
/**
* Returns an EntityLoadQueryDetails object from the given inputs.
*
* @param loadPlan The load plan
* @param keyColumnNames The columns to load the entity by (the PK columns or some other unique set of columns)
* @param buildingParameters Any influencers that would affect the generated SQL (mostly we are concerned with those
* that add additional joins here)
* @param factory The SessionFactory
*
* @return The EntityLoadQueryDetails
*/
public EntityLoadQueryDetails makeEntityLoadQueryDetails(
LoadPlan loadPlan,
String[] keyColumnNames,
QueryBuildingParameters buildingParameters,
SessionFactoryImplementor factory) {
return makeEntityLoadQueryDetails(
loadPlan,
keyColumnNames,
buildingParameters,
factory,
ResultSetProcessorResolver.DEFAULT
);
}
/**
* Returns a EntityLoadQueryDetails object based on an existing one and additional elements specific to this one.
*
* @param entityLoadQueryDetailsTemplate the template
* @param buildingParameters Any influencers that would affect the generated SQL (mostly we are concerned with those
* that add additional joins here)
* @oaram resultSetProcessorResolver The ResultSet processor resolver.
*
* @return The EntityLoadQueryDetails
*/
public EntityLoadQueryDetails makeEntityLoadQueryDetails(
EntityLoadQueryDetails entityLoadQueryDetailsTemplate,
QueryBuildingParameters buildingParameters,
ResultSetProcessorResolver resultSetProcessorResolver) {
return new EntityLoadQueryDetails(
entityLoadQueryDetailsTemplate,
buildingParameters,
resultSetProcessorResolver
);
}
/**
* Returns a EntityLoadQueryDetails object based on an existing one and additional elements specific to this one.
*
* @param entityLoadQueryDetailsTemplate the template
* @param buildingParameters Any influencers that would affect the generated SQL (mostly we are concerned with those
* that add additional joins here)
* @return The EntityLoadQueryDetails
*/
public EntityLoadQueryDetails makeEntityLoadQueryDetails(
EntityLoadQueryDetails entityLoadQueryDetailsTemplate,
QueryBuildingParameters buildingParameters) {
return makeEntityLoadQueryDetails(
entityLoadQueryDetailsTemplate,
buildingParameters,
ResultSetProcessorResolver.DEFAULT
);
}
/**
* Constructs a BasicCollectionLoadQueryDetails object from the given inputs.
*
* @param collectionPersister The collection persister.
* @param loadPlan The load plan.
* @param buildingParameters Any influencers that would affect the generated SQL (mostly we are concerned with those
* that add additional joins here)
*
* @return The EntityLoadQueryDetails
*/
public LoadQueryDetails makeCollectionLoadQueryDetails(
CollectionPersister collectionPersister,
LoadPlan loadPlan,
QueryBuildingParameters buildingParameters) {
final CollectionReturn rootReturn = RootHelper.INSTANCE.extractRootReturn( loadPlan, CollectionReturn.class );
final AliasResolutionContextImpl aliasResolutionContext = new AliasResolutionContextImpl(
collectionPersister.getFactory()
);
return collectionPersister.isOneToMany() ?
new OneToManyLoadQueryDetails(
loadPlan,
aliasResolutionContext,
rootReturn,
buildingParameters,
collectionPersister.getFactory()
) :
new BasicCollectionLoadQueryDetails(
loadPlan,
aliasResolutionContext,
rootReturn,
buildingParameters,
collectionPersister.getFactory()
);
}
}