У меня есть модульный тест, который использует Hibernate для проверки работы некоторых операторов HQL.
К сожалению, модульный тест не удался, поскольку в коде Hibernate есть подтверждение. >
См.: https://github.com/hibernate/hibernate- ... .java#L315
У меня есть модульный тест, который использует Hibernate для проверки работы некоторых операторов HQL. К сожалению, модульный тест не удался, поскольку в коде Hibernate есть подтверждение. > См.: https://github.com/hibernate/hibernate-orm/blob/91cdac46827c7b4db8ffb27f69ff7ddaf45713b5/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/select/SqmSelectStatement.java#L315 [code] assert querySource == CRITERIA; < /code> < /blockquote> Как деактивировать их утверждения? >public String translateHql(final String hql, final SharedSessionContractImplementor session, final String queryName) { QueryEngine queryEngine = session.getFactory().getQueryEngine(); HqlTranslator hqlTranslator = queryEngine.getHqlTranslator(); SqmSelectStatement sqmSelectStmt = null; try { sqmSelectStmt = (SqmSelectStatement) hqlTranslator.translate(hql, null); } catch (SemanticException e) { LOG.log(Level.SEVERE, hql, e); } if (sqmSelectStmt == null) { throw new RuntimeException("This is not a select-query!"); } SqlAstCreationContext sqlAstContext = session.getFactory(); QueryParameterBindings paramBindings = QueryParameterBindingsImpl.from(ParameterMetadataImpl.EMPTY, session.getSessionFactory()); SqmTranslator sqmTranslator = queryEngine.getSqmTranslatorFactory().createSelectTranslator( sqmSelectStmt, QueryOptions.NONE, DomainParameterXref.from(sqmSelectStmt), paramBindings, new LoadQueryInfluencers(session.getFactory()), sqlAstContext, true); SqmTranslation sqmTranslate = null; try { sqmTranslate = sqmTranslator.translate(); } catch (ClassCastException e) { throw new RuntimeException("I could not translate '" + queryName + "' to SQM!", e); } SelectStatement sqlStatement = sqmTranslate.getSqlAst(); SqlAstTranslatorFactory sqlTranslatorFactory = session.getFactory().getJdbcServices().getJdbcEnvironment() .getSqlAstTranslatorFactory(); SqlAstTranslator sqlAst = sqlTranslatorFactory .buildSelectTranslator(session.getFactory(), sqlStatement); JdbcParameterBindings jdbcParam = new JdbcParameterBindingsImpl(0); JdbcOperationQuerySelect sqlSelect = sqlAst.translate(jdbcParam, QueryOptions.READ_ONLY); return sqlSelect.getSqlString(); } < /code> Это тест-метод: < /p> public void test(){ assert "select \"account\".\"id\" as \"account0_id\" from account;".equals(service.translateHql("SELECT id FROM Account", session, "Select-test")); } [/code] Еще одна проблема заключается в этом утверждении: [code]java.lang.AssertionError at org.hibernate.query.internal.ParameterMetadataImpl.(ParameterMetadataImpl.java:92) [/code] См. https://github.com/hibernate/hibernate-orm/blob/91cdac46827c7b4db8ffb27f69ff7ddaf45713b5/hibernate-core/src/main/java/org/hibernate/query/internal/ParameterMetadataImpl. java#L60