List of usage examples for org.hibernate.engine.spi QueryParameters validateParameters
public void validateParameters() throws QueryException
From source file:com.blazebit.persistence.integration.hibernate.base.HibernateExtendedQuerySupport.java
License:Apache License
@Override @SuppressWarnings("unchecked") public ReturningResult<Object[]> executeReturning(com.blazebit.persistence.spi.ServiceProvider serviceProvider, List<Query> participatingQueries, Query modificationBaseQuery, Query exampleQuery, String sqlOverride) { DbmsDialect dbmsDialect = serviceProvider.getService(DbmsDialect.class); EntityManager em = serviceProvider.getService(EntityManager.class); SessionImplementor session = em.unwrap(SessionImplementor.class); SessionFactoryImplementor sfi = session.getFactory(); if (session.isClosed()) { throw new PersistenceException("Entity manager is closed!"); }//from w w w . j av a 2 s . c o m // Create combined query parameters List<String> queryStrings = new ArrayList<>(participatingQueries.size()); Set<String> querySpaces = new HashSet<>(); QueryParamEntry queryParametersEntry = createQueryParameters(em, participatingQueries, queryStrings, querySpaces); QueryParameters queryParameters = queryParametersEntry.queryParameters; // Create plan for example query QueryPlanCacheKey cacheKey = createCacheKey(queryStrings); CacheEntry<HQLQueryPlan> queryPlanEntry = getQueryPlan(sfi, exampleQuery, cacheKey); HQLQueryPlan queryPlan = queryPlanEntry.getValue(); String exampleQuerySql = queryPlan.getSqlStrings()[0]; StringBuilder sqlSb = new StringBuilder(sqlOverride.length() + 100); sqlSb.append(sqlOverride); boolean caseInsensitive = !Boolean.valueOf(serviceProvider.getService(ConfigurationSource.class) .getProperty("com.blazebit.persistence.returning_clause_case_sensitive")); String[][] returningColumns = getReturningColumns(caseInsensitive, exampleQuerySql); int[] returningColumnTypes = dbmsDialect.needsReturningSqlTypes() ? getReturningColumnTypes(queryPlan, sfi) : null; String finalSql = sqlSb.toString(); try { HibernateReturningResult<Object[]> returningResult = new HibernateReturningResult<Object[]>(); if (!queryPlanEntry.isFromCache()) { prepareQueryPlan(queryPlan, queryParametersEntry.specifications, finalSql, session, modificationBaseQuery, true, dbmsDialect); queryPlan = putQueryPlanIfAbsent(sfi, cacheKey, queryPlan); } if (queryPlan.getTranslators().length > 1) { throw new IllegalArgumentException("No support for multiple translators yet!"); } QueryTranslator queryTranslator = queryPlan.getTranslators()[0]; // If the DBMS doesn't support inclusion of cascading deletes in a with clause, we have to execute them manually StatementExecutor executor = getExecutor(queryTranslator, session, modificationBaseQuery); List<String> originalDeletes = Collections.emptyList(); if (executor != null && executor instanceof DeleteExecutor) { originalDeletes = getField(executor, "deletes"); } // Extract query loader for native listing QueryLoader queryLoader = getField(queryTranslator, "queryLoader"); // Do the native list operation with custom session and combined parameters /* * NATIVE LIST START */ hibernateAccess.checkTransactionSynchStatus(session); queryParameters.validateParameters(); autoFlush(querySpaces, session); List<Object[]> results = Collections.EMPTY_LIST; boolean success = false; try { for (String delete : originalDeletes) { hibernateAccess.doExecute(executor, delete, queryParameters, session, queryParametersEntry.specifications); } results = hibernateAccess.list(queryLoader, wrapSession(session, dbmsDialect, returningColumns, returningColumnTypes, returningResult), queryParameters); success = true; } catch (QueryExecutionRequestException he) { LOG.severe("Could not execute the following SQL query: " + finalSql); throw new IllegalStateException(he); } catch (TypeMismatchException e) { LOG.severe("Could not execute the following SQL query: " + finalSql); throw new IllegalArgumentException(e); } catch (HibernateException he) { LOG.severe("Could not execute the following SQL query: " + finalSql); throw hibernateAccess.convert(em, he); } finally { hibernateAccess.afterTransaction(session, success); } /* * NATIVE LIST END */ returningResult.setResultList(results); return returningResult; } catch (Exception e1) { throw new RuntimeException(e1); } }
From source file:org.babyfish.hibernate.internal.SessionImplWrapper.java
License:Open Source License
@SuppressWarnings("unchecked") protected static <T> List<T> list(XSessionImplementor sessionProxy, String query, QueryParameters queryParameters, QueryType queryType, PathPlanKey pathPlanKey) throws HibernateException { errorIfClosed(sessionProxy.getRawSessionImpl()); checkTransactionSynchStatus(sessionProxy.getRawSessionImpl()); queryParameters.validateParameters(); XQueryPlanCache queryPlanCache = (XQueryPlanCache) sessionProxy.getFactory().getQueryPlanCache(); XQueryPlan plan = queryPlanCache.getHQLQueryPlan(query, pathPlanKey, false, sessionProxy.getRawSessionImpl().getEnabledFilters()); autoFlushIfRequired(sessionProxy.getRawSessionImpl(), plan.getQuerySpaces()); List<T> results;// w w w. j a v a 2 s.com boolean success = false; //stops flush being called multiple times if this method is recursively called increaseDontFlushFromFind(sessionProxy.getRawSessionImpl()); try { results = plan.performList(sessionProxy.getRawSessionImpl(), queryParameters, queryType); success = true; } finally { decreaseDontFlushFromFind(sessionProxy.getRawSessionImpl()); afterOperation(sessionProxy.getRawSessionImpl(), success); } return results; }
From source file:org.babyfish.hibernate.internal.SessionImplWrapper.java
License:Open Source License
@SuppressWarnings("unchecked") protected static long unlimitedCount(XSessionImplementor sessionProxy, String query, QueryParameters queryParameters, QueryType queryType, PathPlanKey pathPlanKey) throws HibernateException { errorIfClosed(sessionProxy.getRawSessionImpl()); checkTransactionSynchStatus(sessionProxy.getRawSessionImpl()); queryParameters.validateParameters(); XQueryPlanCache queryPlanCache = (XQueryPlanCache) sessionProxy.getFactory().getQueryPlanCache(); XQueryPlan plan = queryPlanCache.getHQLQueryPlan(query, pathPlanKey, false, sessionProxy.getRawSessionImpl().getEnabledFilters()); autoFlushIfRequired(sessionProxy.getRawSessionImpl(), plan.getQuerySpaces()); long count = 0; boolean success = false; //stops flush being called multiple times if this method is recursively called increaseDontFlushFromFind(sessionProxy.getRawSessionImpl()); try {/*from w w w . j av a 2 s.c o m*/ count = plan.performUnlimitedCount(sessionProxy.getRawSessionImpl(), queryParameters, queryType); success = true; } finally { decreaseDontFlushFromFind(sessionProxy.getRawSessionImpl()); afterOperation(sessionProxy.getRawSessionImpl(), success); } return count; }