MSSQL выпуск Hibernate Критерии - PullRequest
0 голосов
/ 08 мая 2018

Я использую Java-Hibernate с двумя базами данных (Postgresql и MSSQL).SqlServer2012 с диалектом:

hibernate.dialect = org.hibernate.dialect.SQLServer2012Dialect

Я написал запрос Criteria, например:

DetachedCriteria detachedCriteria=DetachedCriteria.forClass(entityClazz);
ProjectionList proj = Projections.projectionList();
proj.add(Projections.max(COMPOSEDID_VERSION_ID));
proj.add(Projections.groupProperty(COMPOSEDID_ID));
detachedCriteria.setProjection(proj);

criteria = session.createCriteria(entityClazz)
            .add( Subqueries.propertiesIn(new String[] { COMPOSEDID_VERSION_ID, COMPOSEDID_ID }, detachedCriteria));

Этот запрос отлично работал с Postgre Db.Но когда я переключаюсь на MSSQL, я получаю следующую ошибку:

Caused by: java.sql.SQLException: An expression of non-boolean type specified in a context where a condition is expected, near ','.
    at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:372)
    at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2988)
    at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2421)
    at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:671)
    at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:505)
    at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:1029)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:70)[201:org.hibernate.core:5.0.0.Final] 

Кто-нибудь может мне помочь?Какое изменение я должен внести в Criteria API, чтобы достичь своей цели - получить запись maxVersion по каждому идентификатору ??

1 Ответ

0 голосов
/ 02 июля 2018

Вместо добавления подзапросов в критерии проекций из отдельных критериев, добавьте проекцию непосредственно в критериях следующим образом:

DetachedCriteria detachedCriteria=DetachedCriteria.forClass(entityClazz);
ProjectionList proj = Projections.projectionList();
proj.add(Projections.max(COMPOSEDID_VERSION_ID));
proj.add(Projections.groupProperty(COMPOSEDID_ID));


criteria = session.createCriteria(entityClazz)
.setProjection( proj );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...