Search in sources :

Example 1 with JdbcParameterBindingsImpl

use of org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl in project hibernate-orm by hibernate.

the class NativeNonSelectQueryPlanImpl method executeUpdate.

@Override
public int executeUpdate(DomainQueryExecutionContext executionContext) {
    executionContext.getSession().autoFlushIfRequired(affectedTableNames);
    BulkOperationCleanupAction.schedule(executionContext.getSession(), affectedTableNames);
    final List<JdbcParameterBinder> jdbcParameterBinders;
    final JdbcParameterBindings jdbcParameterBindings;
    final QueryParameterBindings queryParameterBindings = executionContext.getQueryParameterBindings();
    if (parameterList == null || parameterList.isEmpty()) {
        jdbcParameterBinders = Collections.emptyList();
        jdbcParameterBindings = JdbcParameterBindings.NO_BINDINGS;
    } else {
        jdbcParameterBinders = new ArrayList<>(parameterList.size());
        jdbcParameterBindings = new JdbcParameterBindingsImpl(parameterList.size());
        jdbcParameterBindings.registerNativeQueryParameters(queryParameterBindings, parameterList, jdbcParameterBinders, executionContext.getSession().getFactory());
    }
    final JdbcMutation jdbcMutation = new NativeJdbcMutation(sql, jdbcParameterBinders, affectedTableNames);
    final JdbcMutationExecutor executor = StandardJdbcMutationExecutor.INSTANCE;
    final SharedSessionContractImplementor session = executionContext.getSession();
    // return jdbcServices.getJdbcMutationExecutor().execute(
    return executor.execute(jdbcMutation, jdbcParameterBindings, sql -> session.getJdbcCoordinator().getStatementPreparer().prepareStatement(sql), (integer, preparedStatement) -> {
    }, SqmJdbcExecutionContextAdapter.usingLockingAndPaging(executionContext));
}
Also used : NativeJdbcMutation(org.hibernate.sql.exec.spi.NativeJdbcMutation) NativeJdbcMutation(org.hibernate.sql.exec.spi.NativeJdbcMutation) JdbcMutation(org.hibernate.sql.exec.spi.JdbcMutation) JdbcParameterBindingsImpl(org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl) SharedSessionContractImplementor(org.hibernate.engine.spi.SharedSessionContractImplementor) QueryParameterBindings(org.hibernate.query.spi.QueryParameterBindings) JdbcParameterBinder(org.hibernate.sql.exec.spi.JdbcParameterBinder) JdbcParameterBindings(org.hibernate.sql.exec.spi.JdbcParameterBindings) JdbcMutationExecutor(org.hibernate.sql.exec.spi.JdbcMutationExecutor) StandardJdbcMutationExecutor(org.hibernate.sql.exec.internal.StandardJdbcMutationExecutor)

Example 2 with JdbcParameterBindingsImpl

use of org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl in project hibernate-orm by hibernate.

the class SingleIdEntityLoaderDynamicBatch method load.

@Override
public T load(Object pkValue, Object entityInstance, LockOptions lockOptions, Boolean readOnly, SharedSessionContractImplementor session) {
    final Object[] batchIds = session.getPersistenceContextInternal().getBatchFetchQueue().getBatchLoadableEntityIds(getLoadable(), pkValue, maxBatchSize);
    final int numberOfIds = ArrayHelper.countNonNull(batchIds);
    if (numberOfIds <= 1) {
        initializeSingleIdLoaderIfNeeded(session);
        final T result = singleIdLoader.load(pkValue, entityInstance, lockOptions, readOnly, session);
        if (result == null) {
            // There was no entity with the specified ID. Make sure the EntityKey does not remain
            // in the batch to avoid including it in future batches that get executed.
            BatchFetchQueueHelper.removeBatchLoadableEntityKey(pkValue, getLoadable(), session);
        }
        return result;
    }
    final Object[] idsToLoad = new Object[numberOfIds];
    System.arraycopy(batchIds, 0, idsToLoad, 0, numberOfIds);
    if (log.isDebugEnabled()) {
        log.debugf("Batch loading entity [%s] : %s", getLoadable().getEntityName(), idsToLoad);
    }
    final List<JdbcParameter> jdbcParameters = new ArrayList<>();
    final SelectStatement sqlAst = LoaderSelectBuilder.createSelect(getLoadable(), // null here means to select everything
    null, getLoadable().getIdentifierMapping(), null, numberOfIds, session.getLoadQueryInfluencers(), lockOptions, jdbcParameters::add, session.getFactory());
    final SessionFactoryImplementor sessionFactory = session.getFactory();
    final JdbcServices jdbcServices = sessionFactory.getJdbcServices();
    final JdbcEnvironment jdbcEnvironment = jdbcServices.getJdbcEnvironment();
    final SqlAstTranslatorFactory sqlAstTranslatorFactory = jdbcEnvironment.getSqlAstTranslatorFactory();
    final JdbcParameterBindings jdbcParameterBindings = new JdbcParameterBindingsImpl(getLoadable().getIdentifierMapping().getJdbcTypeCount());
    int offset = 0;
    for (int i = 0; i < numberOfIds; i++) {
        offset += jdbcParameterBindings.registerParametersForEachJdbcValue(idsToLoad[i], Clause.WHERE, offset, getLoadable().getIdentifierMapping(), jdbcParameters, session);
    }
    assert offset == jdbcParameters.size();
    final JdbcSelect jdbcSelect = sqlAstTranslatorFactory.buildSelectTranslator(sessionFactory, sqlAst).translate(jdbcParameterBindings, QueryOptions.NONE);
    final SubselectFetch.RegistrationHandler subSelectFetchableKeysHandler = SubselectFetch.createRegistrationHandler(session.getPersistenceContext().getBatchFetchQueue(), sqlAst, jdbcParameters, jdbcParameterBindings);
    JdbcSelectExecutorStandardImpl.INSTANCE.list(jdbcSelect, jdbcParameterBindings, getExecutionContext(pkValue, entityInstance, readOnly, lockOptions, session, subSelectFetchableKeysHandler), RowTransformerPassThruImpl.instance(), ListResultsConsumer.UniqueSemantic.FILTER);
    // noinspection ForLoopReplaceableByForEach
    for (int i = 0; i < idsToLoad.length; i++) {
        final Object id = idsToLoad[i];
        // found or not, remove the key from the batch-fetch queye
        BatchFetchQueueHelper.removeBatchLoadableEntityKey(id, getLoadable(), session);
    }
    final EntityKey entityKey = session.generateEntityKey(pkValue, getLoadable().getEntityPersister());
    // noinspection unchecked
    return (T) session.getPersistenceContext().getEntity(entityKey);
}
Also used : JdbcSelect(org.hibernate.sql.exec.spi.JdbcSelect) SubselectFetch(org.hibernate.engine.spi.SubselectFetch) JdbcParameterBindingsImpl(org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl) JdbcParameter(org.hibernate.sql.ast.tree.expression.JdbcParameter) SessionFactoryImplementor(org.hibernate.engine.spi.SessionFactoryImplementor) ArrayList(java.util.ArrayList) JdbcServices(org.hibernate.engine.jdbc.spi.JdbcServices) JdbcEnvironment(org.hibernate.engine.jdbc.env.spi.JdbcEnvironment) SqlAstTranslatorFactory(org.hibernate.sql.ast.SqlAstTranslatorFactory) SelectStatement(org.hibernate.sql.ast.tree.select.SelectStatement) EntityKey(org.hibernate.engine.spi.EntityKey) JdbcParameterBindings(org.hibernate.sql.exec.spi.JdbcParameterBindings)

Example 3 with JdbcParameterBindingsImpl

use of org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl in project hibernate-orm by hibernate.

the class SingleIdLoadPlan method load.

public T load(Object restrictedValue, Object entityInstance, Boolean readOnly, Boolean singleResultExpected, SharedSessionContractImplementor session) {
    final int jdbcTypeCount = restrictivePart.getJdbcTypeCount();
    assert jdbcParameters.size() % jdbcTypeCount == 0;
    final JdbcParameterBindings jdbcParameterBindings = new JdbcParameterBindingsImpl(jdbcTypeCount);
    jdbcSelect.bindFilterJdbcParameters(jdbcParameterBindings);
    int offset = 0;
    while (offset < jdbcParameters.size()) {
        offset += jdbcParameterBindings.registerParametersForEachJdbcValue(restrictedValue, Clause.WHERE, offset, restrictivePart, jdbcParameters, session);
    }
    assert offset == jdbcParameters.size();
    final QueryOptions queryOptions = new SimpleQueryOptions(lockOptions, readOnly);
    final Callback callback = new CallbackImpl();
    final List<T> list = JdbcSelectExecutorStandardImpl.INSTANCE.list(jdbcSelect, jdbcParameterBindings, new ExecutionContext() {

        @Override
        public SharedSessionContractImplementor getSession() {
            return session;
        }

        @Override
        public Object getEntityInstance() {
            return entityInstance;
        }

        @Override
        public Object getEntityId() {
            return restrictedValue;
        }

        @Override
        public QueryOptions getQueryOptions() {
            return queryOptions;
        }

        @Override
        public String getQueryIdentifier(String sql) {
            return sql;
        }

        @Override
        public QueryParameterBindings getQueryParameterBindings() {
            return QueryParameterBindings.NO_PARAM_BINDINGS;
        }

        @Override
        public Callback getCallback() {
            return callback;
        }
    }, getRowTransformer(), singleResultExpected ? ListResultsConsumer.UniqueSemantic.ASSERT : ListResultsConsumer.UniqueSemantic.FILTER);
    if (list.isEmpty()) {
        return null;
    }
    final T entity = list.get(0);
    if (persister != null) {
        callback.invokeAfterLoadActions(session, entity, persister);
    }
    return entity;
}
Also used : CallbackImpl(org.hibernate.sql.exec.internal.CallbackImpl) JdbcParameterBindingsImpl(org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl) SharedSessionContractImplementor(org.hibernate.engine.spi.SharedSessionContractImplementor) QueryOptions(org.hibernate.query.spi.QueryOptions) SimpleQueryOptions(org.hibernate.query.internal.SimpleQueryOptions) Callback(org.hibernate.sql.exec.spi.Callback) ExecutionContext(org.hibernate.sql.exec.spi.ExecutionContext) SimpleQueryOptions(org.hibernate.query.internal.SimpleQueryOptions) QueryParameterBindings(org.hibernate.query.spi.QueryParameterBindings) JdbcParameterBindings(org.hibernate.sql.exec.spi.JdbcParameterBindings)

Example 4 with JdbcParameterBindingsImpl

use of org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl in project hibernate-orm by hibernate.

the class SingleUniqueKeyEntityLoaderStandard method resolveId.

@Override
public Object resolveId(Object ukValue, SharedSessionContractImplementor session) {
    final SessionFactoryImplementor sessionFactory = session.getFactory();
    // todo (6.0) : cache the SQL AST and JdbcParameters
    final List<JdbcParameter> jdbcParameters = new ArrayList<>();
    final SelectStatement sqlAst = LoaderSelectBuilder.createSelectByUniqueKey(entityDescriptor, Collections.singletonList(entityDescriptor.getIdentifierMapping()), uniqueKeyAttribute, null, 1, LoadQueryInfluencers.NONE, LockOptions.NONE, jdbcParameters::add, sessionFactory);
    final JdbcServices jdbcServices = sessionFactory.getJdbcServices();
    final JdbcEnvironment jdbcEnvironment = jdbcServices.getJdbcEnvironment();
    final SqlAstTranslatorFactory sqlAstTranslatorFactory = jdbcEnvironment.getSqlAstTranslatorFactory();
    final JdbcParameterBindings jdbcParameterBindings = new JdbcParameterBindingsImpl(jdbcParameters.size());
    int offset = jdbcParameterBindings.registerParametersForEachJdbcValue(ukValue, Clause.WHERE, uniqueKeyAttribute, jdbcParameters, session);
    assert offset == jdbcParameters.size();
    final JdbcSelect jdbcSelect = sqlAstTranslatorFactory.buildSelectTranslator(sessionFactory, sqlAst).translate(jdbcParameterBindings, QueryOptions.NONE);
    final List<Object> list = sessionFactory.getJdbcServices().getJdbcSelectExecutor().list(jdbcSelect, jdbcParameterBindings, new ExecutionContext() {

        @Override
        public SharedSessionContractImplementor getSession() {
            return session;
        }

        @Override
        public QueryOptions getQueryOptions() {
            return QueryOptions.NONE;
        }

        @Override
        public String getQueryIdentifier(String sql) {
            return sql;
        }

        @Override
        public QueryParameterBindings getQueryParameterBindings() {
            return QueryParameterBindings.NO_PARAM_BINDINGS;
        }

        @Override
        public Callback getCallback() {
            throw new UnsupportedOperationException("Follow-on locking not supported yet");
        }
    }, row -> row[0], ListResultsConsumer.UniqueSemantic.FILTER);
    assert list.size() == 1;
    return list.get(0);
}
Also used : JdbcSelect(org.hibernate.sql.exec.spi.JdbcSelect) JdbcParameterBindingsImpl(org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl) SessionFactoryImplementor(org.hibernate.engine.spi.SessionFactoryImplementor) JdbcParameter(org.hibernate.sql.ast.tree.expression.JdbcParameter) ArrayList(java.util.ArrayList) SharedSessionContractImplementor(org.hibernate.engine.spi.SharedSessionContractImplementor) JdbcServices(org.hibernate.engine.jdbc.spi.JdbcServices) JdbcEnvironment(org.hibernate.engine.jdbc.env.spi.JdbcEnvironment) QueryOptions(org.hibernate.query.spi.QueryOptions) SqlAstTranslatorFactory(org.hibernate.sql.ast.SqlAstTranslatorFactory) SelectStatement(org.hibernate.sql.ast.tree.select.SelectStatement) ExecutionContext(org.hibernate.sql.exec.spi.ExecutionContext) Callback(org.hibernate.sql.exec.spi.Callback) QueryParameterBindings(org.hibernate.query.spi.QueryParameterBindings) JdbcParameterBindings(org.hibernate.sql.exec.spi.JdbcParameterBindings)

Example 5 with JdbcParameterBindingsImpl

use of org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl in project hibernate-orm by hibernate.

the class SqmUtil method createJdbcParameterBindings.

// public static JdbcParameterBindings buildJdbcParameterBindings(
// SqmStatement sqmStatement,
// JdbcParameterBySqmParameterAccess sqmInterpretation,
// ExecutionContext executionContext) {
// final DomainParameterXref domainParameterXref = DomainParameterXref.from( sqmStatement );
// final Map<QueryParameterImplementor<?>, Map<SqmParameter, List<JdbcParameter>>> jdbcParamsXref =
// generateJdbcParamsXref( domainParameterXref, sqmInterpretation );
// return createJdbcParameterBindings(
// executionContext.getDomainParameterBindingContext().getQueryParameterBindings(),
// domainParameterXref,
// jdbcParamsXref,
// executionContext.getSession()
// );
// }
// public static JdbcParameterBindings buildJdbcParameterBindings(
// SqmStatement sqmStatement,
// Map<QueryParameterImplementor<?>, Map<SqmParameter, List<JdbcParameter>>> jdbcParamsXref,
// ExecutionContext executionContext) {
// final DomainParameterXref domainParameterXref = DomainParameterXref.from( sqmStatement );
// return createJdbcParameterBindings(
// executionContext.getDomainParameterBindingContext().getQueryParameterBindings(),
// domainParameterXref,
// jdbcParamsXref,
// executionContext.getSession()
// );
// }
// public static JdbcParameterBindings buildJdbcParameterBindings(
// DomainParameterXref domainParameterXref,
// Map<QueryParameterImplementor<?>, Map<SqmParameter, List<JdbcParameter>>> jdbcParamsXref,
// ExecutionContext executionContext) {
// return createJdbcParameterBindings(
// executionContext.getDomainParameterBindingContext().getQueryParameterBindings(),
// domainParameterXref,
// jdbcParamsXref,
// executionContext.getSession()
// );
// }
public static JdbcParameterBindings createJdbcParameterBindings(QueryParameterBindings domainParamBindings, DomainParameterXref domainParameterXref, Map<QueryParameterImplementor<?>, Map<SqmParameter<?>, List<List<JdbcParameter>>>> jdbcParamXref, MappingMetamodel domainModel, Function<NavigablePath, TableGroup> tableGroupLocator, SqmParameterMappingModelResolutionAccess mappingModelResolutionAccess, SharedSessionContractImplementor session) {
    final JdbcParameterBindings jdbcParameterBindings = new JdbcParameterBindingsImpl(domainParameterXref.getSqmParameterCount());
    for (Map.Entry<QueryParameterImplementor<?>, List<SqmParameter<?>>> entry : domainParameterXref.getSqmParamByQueryParam().entrySet()) {
        final QueryParameterImplementor<?> queryParam = entry.getKey();
        final List<SqmParameter<?>> sqmParameters = entry.getValue();
        final QueryParameterBinding<?> domainParamBinding = domainParamBindings.getBinding(queryParam);
        final Map<SqmParameter<?>, List<List<JdbcParameter>>> jdbcParamMap = jdbcParamXref.get(queryParam);
        for (SqmParameter<?> sqmParameter : sqmParameters) {
            final Bindable parameterType = determineParameterType(domainParamBinding, queryParam, sqmParameters, mappingModelResolutionAccess, session.getFactory());
            final List<List<JdbcParameter>> jdbcParamsBinds = jdbcParamMap.get(sqmParameter);
            if (jdbcParamsBinds == null) {
                // is replaced with an alias reference expression, which can happen for JPA Criteria queries
                continue;
            }
            if (!domainParamBinding.isBound()) {
                for (int i = 0; i < jdbcParamsBinds.size(); i++) {
                    final List<JdbcParameter> jdbcParams = jdbcParamsBinds.get(i);
                    parameterType.forEachJdbcType((position, jdbcType) -> {
                        jdbcParameterBindings.addBinding(jdbcParams.get(position), new JdbcParameterBindingImpl(jdbcType, null));
                    });
                }
            } else if (domainParamBinding.isMultiValued()) {
                final Collection<?> bindValues = domainParamBinding.getBindValues();
                final Iterator<?> valueItr = bindValues.iterator();
                // the original SqmParameter is the one we are processing.. create a binding for it..
                for (int i = 0; i < jdbcParamsBinds.size(); i++) {
                    final List<JdbcParameter> jdbcParams = jdbcParamsBinds.get(i);
                    createValueBindings(jdbcParameterBindings, queryParam, domainParamBinding, parameterType, jdbcParams, valueItr.next(), tableGroupLocator, session);
                }
                // an then one for each of the expansions
                final List<SqmParameter<?>> expansions = domainParameterXref.getExpansions(sqmParameter);
                assert expansions.size() == bindValues.size() - 1;
                int expansionPosition = 0;
                while (valueItr.hasNext()) {
                    final SqmParameter<?> expansionSqmParam = expansions.get(expansionPosition++);
                    final List<List<JdbcParameter>> jdbcParamBinds = jdbcParamMap.get(expansionSqmParam);
                    for (int i = 0; i < jdbcParamBinds.size(); i++) {
                        List<JdbcParameter> expansionJdbcParams = jdbcParamBinds.get(i);
                        createValueBindings(jdbcParameterBindings, queryParam, domainParamBinding, parameterType, expansionJdbcParams, valueItr.next(), tableGroupLocator, session);
                    }
                }
            } else if (domainParamBinding.getBindValue() == null) {
                for (int i = 0; i < jdbcParamsBinds.size(); i++) {
                    final List<JdbcParameter> jdbcParams = jdbcParamsBinds.get(i);
                    for (int j = 0; j < jdbcParams.size(); j++) {
                        final JdbcParameter jdbcParameter = jdbcParams.get(j);
                        jdbcParameterBindings.addBinding(jdbcParameter, new JdbcParameterBindingImpl(null, null));
                    }
                }
            } else {
                if (domainParamBinding.getType() instanceof AttributeConverterTypeAdapter || domainParamBinding.getType() instanceof ConvertibleModelPart) {
                    final BasicValueConverter valueConverter;
                    final JdbcMapping jdbcMapping;
                    if (domainParamBinding.getType() instanceof AttributeConverterTypeAdapter) {
                        final AttributeConverterTypeAdapter<?> adapter = (AttributeConverterTypeAdapter<?>) domainParamBinding.getType();
                        valueConverter = adapter.getAttributeConverter();
                        jdbcMapping = adapter.getJdbcMapping();
                    } else {
                        final ConvertibleModelPart convertibleModelPart = (ConvertibleModelPart) domainParamBinding.getType();
                        valueConverter = convertibleModelPart.getValueConverter();
                        jdbcMapping = convertibleModelPart.getJdbcMapping();
                    }
                    if (valueConverter != null) {
                        final Object convertedValue = valueConverter.toRelationalValue(domainParamBinding.getBindValue());
                        for (int i = 0; i < jdbcParamsBinds.size(); i++) {
                            final List<JdbcParameter> jdbcParams = jdbcParamsBinds.get(i);
                            assert jdbcParams.size() == 1;
                            final JdbcParameter jdbcParameter = jdbcParams.get(0);
                            jdbcParameterBindings.addBinding(jdbcParameter, new JdbcParameterBindingImpl(jdbcMapping, convertedValue));
                        }
                        continue;
                    }
                }
                final Object bindValue = domainParamBinding.getBindValue();
                for (int i = 0; i < jdbcParamsBinds.size(); i++) {
                    final List<JdbcParameter> jdbcParams = jdbcParamsBinds.get(i);
                    createValueBindings(jdbcParameterBindings, queryParam, domainParamBinding, parameterType, jdbcParams, bindValue, tableGroupLocator, session);
                }
            }
        }
    }
    return jdbcParameterBindings;
}
Also used : JdbcMapping(org.hibernate.metamodel.mapping.JdbcMapping) ConvertibleModelPart(org.hibernate.metamodel.mapping.ConvertibleModelPart) Iterator(java.util.Iterator) List(java.util.List) ArrayList(java.util.ArrayList) JdbcParameterBindingsImpl(org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl) JdbcParameter(org.hibernate.sql.ast.tree.expression.JdbcParameter) Bindable(org.hibernate.metamodel.mapping.Bindable) JdbcParameterBindingImpl(org.hibernate.sql.exec.internal.JdbcParameterBindingImpl) AttributeConverterTypeAdapter(org.hibernate.type.descriptor.converter.AttributeConverterTypeAdapter) QueryParameterImplementor(org.hibernate.query.spi.QueryParameterImplementor) Collection(java.util.Collection) SqmParameter(org.hibernate.query.sqm.tree.expression.SqmParameter) Map(java.util.Map) IdentityHashMap(java.util.IdentityHashMap) JdbcParameterBindings(org.hibernate.sql.exec.spi.JdbcParameterBindings) BasicValueConverter(org.hibernate.metamodel.model.convert.spi.BasicValueConverter)

Aggregations

JdbcParameterBindingsImpl (org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl)20 JdbcParameterBindings (org.hibernate.sql.exec.spi.JdbcParameterBindings)19 QueryParameterBindings (org.hibernate.query.spi.QueryParameterBindings)14 SharedSessionContractImplementor (org.hibernate.engine.spi.SharedSessionContractImplementor)13 ExecutionContext (org.hibernate.sql.exec.spi.ExecutionContext)13 JdbcSelect (org.hibernate.sql.exec.spi.JdbcSelect)13 Callback (org.hibernate.sql.exec.spi.Callback)12 JdbcServices (org.hibernate.engine.jdbc.spi.JdbcServices)11 QueryOptions (org.hibernate.query.spi.QueryOptions)11 JdbcEnvironment (org.hibernate.engine.jdbc.env.spi.JdbcEnvironment)10 SessionFactoryImplementor (org.hibernate.engine.spi.SessionFactoryImplementor)10 SqlAstTranslatorFactory (org.hibernate.sql.ast.SqlAstTranslatorFactory)10 ArrayList (java.util.ArrayList)9 JdbcParameter (org.hibernate.sql.ast.tree.expression.JdbcParameter)9 SelectStatement (org.hibernate.sql.ast.tree.select.SelectStatement)8 EntityKey (org.hibernate.engine.spi.EntityKey)4 SubselectFetch (org.hibernate.engine.spi.SubselectFetch)4 CallbackImpl (org.hibernate.sql.exec.internal.CallbackImpl)4 JdbcParameterBinder (org.hibernate.sql.exec.spi.JdbcParameterBinder)4 Map (java.util.Map)3