org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorHelper Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hibernate-core Show documentation
Show all versions of hibernate-core Show documentation
Hibernate's core ORM functionality
/*
* 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.process.internal;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import org.hibernate.engine.spi.EntityKey;
import org.hibernate.engine.spi.QueryParameters;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.loader.plan.exec.query.spi.NamedParameterContext;
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.type.CompositeType;
/**
* @author Steve Ebersole
*/
public class ResultSetProcessorHelper {
/**
* Singleton access
*/
public static final ResultSetProcessorHelper INSTANCE = new ResultSetProcessorHelper();
public static EntityKey getOptionalObjectKey(QueryParameters queryParameters, SharedSessionContractImplementor session) {
final Object optionalObject = queryParameters.getOptionalObject();
final Serializable optionalId = queryParameters.getOptionalId();
final String optionalEntityName = queryParameters.getOptionalEntityName();
return INSTANCE.interpretEntityKey( session, optionalEntityName, optionalId, optionalObject );
}
public EntityKey interpretEntityKey(
SharedSessionContractImplementor session,
String optionalEntityName,
Serializable optionalId,
Object optionalObject) {
if ( optionalEntityName != null ) {
final EntityPersister entityPersister;
if ( optionalObject != null ) {
entityPersister = session.getEntityPersister( optionalEntityName, optionalObject );
}
else {
entityPersister = session.getFactory().getMetamodel().entityPersister( optionalEntityName );
}
if ( entityPersister.isInstance( optionalId )
&& !entityPersister.getEntityMetamodel().getIdentifierProperty().isVirtual()
&& entityPersister.getEntityMetamodel().getIdentifierProperty().isEmbedded() ) {
// non-encapsulated composite identifier
final Serializable identifierState = ((CompositeType) entityPersister.getIdentifierType()).getPropertyValues(
optionalId,
session
);
return session.generateEntityKey( identifierState, entityPersister );
}
else {
return session.generateEntityKey( optionalId, entityPersister );
}
}
else {
return null;
}
}
public static Map buildNamedParameterLocMap(
QueryParameters queryParameters,
NamedParameterContext namedParameterContext) {
if ( queryParameters.getNamedParameters() == null || queryParameters.getNamedParameters().isEmpty() ) {
return null;
}
final Map namedParameterLocMap = new HashMap<>();
for ( String name : queryParameters.getNamedParameters().keySet() ) {
namedParameterLocMap.put(
name,
namedParameterContext.getNamedParameterLocations( name )
);
}
return namedParameterLocMap;
}
}