use of org.hibernate.query.spi.NavigablePath in project hibernate-orm by hibernate.
the class ResultsHelper method createRowReader.
public static <R> RowReader<R> createRowReader(ExecutionContext executionContext, LockOptions lockOptions, RowTransformer<R> rowTransformer, JdbcValues jdbcValues) {
final Map<NavigablePath, Initializer> initializerMap = new LinkedHashMap<>();
final List<Initializer> initializers = new ArrayList<>();
final SessionFactoryImplementor sessionFactory = executionContext.getSession().getFactory();
final List<DomainResultAssembler<?>> assemblers = jdbcValues.getValuesMapping().resolveAssemblers(new AssemblerCreationState() {
@Override
public LockMode determineEffectiveLockMode(String identificationVariable) {
return lockOptions.getEffectiveLockMode(identificationVariable);
}
@Override
public Initializer resolveInitializer(NavigablePath navigablePath, ModelPart fetchedModelPart, Supplier<Initializer> producer) {
final Initializer existing = initializerMap.get(navigablePath);
if (existing != null) {
if (fetchedModelPart.getNavigableRole().equals(existing.getInitializedPart().getNavigableRole())) {
ResultsLogger.LOGGER.tracef("Returning previously-registered initializer : %s", existing);
return existing;
}
}
final Initializer initializer = producer.get();
ResultsLogger.LOGGER.tracef("Registering initializer : %s", initializer);
initializerMap.put(navigablePath, initializer);
initializers.add(initializer);
return initializer;
}
@Override
public SqlAstCreationContext getSqlAstCreationContext() {
return sessionFactory;
}
});
logInitializers(initializerMap);
return new StandardRowReader<>(assemblers, initializers, rowTransformer);
}
use of org.hibernate.query.spi.NavigablePath in project hibernate-orm by hibernate.
the class AbstractEntityResultGraphNode method afterInitialize.
@Override
public void afterInitialize(FetchParent fetchParent, DomainResultCreationState creationState) {
final EntityMappingType entityDescriptor = referencedModelPart.getEntityMappingType();
final EntityIdentifierMapping identifierMapping = entityDescriptor.getIdentifierMapping();
final NavigablePath navigablePath = getNavigablePath();
final TableGroup entityTableGroup = creationState.getSqlAstCreationState().getFromClauseAccess().getTableGroup(navigablePath);
final EntityIdentifierNavigablePath identifierNavigablePath = new EntityIdentifierNavigablePath(navigablePath, attributeName(identifierMapping));
if (navigablePath.getParent() == null && !creationState.forceIdentifierSelection()) {
identifierFetch = null;
visitIdentifierMapping(identifierNavigablePath, creationState, identifierMapping, entityTableGroup);
} else {
identifierFetch = ((Fetchable) identifierMapping).generateFetch(fetchParent, identifierNavigablePath, FetchTiming.IMMEDIATE, true, null, creationState);
}
final EntityDiscriminatorMapping discriminatorMapping = entityDescriptor.getDiscriminatorMapping();
// No need to fetch the discriminator if this type does not have subclasses
if (discriminatorMapping != null && entityDescriptor.hasSubclasses()) {
discriminatorFetch = discriminatorMapping.generateFetch(fetchParent, navigablePath.append(EntityDiscriminatorMapping.ROLE_NAME), FetchTiming.IMMEDIATE, true, null, creationState);
} else {
discriminatorFetch = null;
}
final EntityRowIdMapping rowIdMapping = entityDescriptor.getRowIdMapping();
if (rowIdMapping == null) {
rowIdResult = null;
} else {
rowIdResult = rowIdMapping.createDomainResult(navigablePath.append(rowIdMapping.getRowIdName()), entityTableGroup, AbstractEntityPersister.ROWID_ALIAS, creationState);
}
super.afterInitialize(fetchParent, creationState);
}
Aggregations