QueryDSL과 최대 절전 모드를 사용하여 SqlServer2008 데이터베이스를 쿼리하고 있습니다.Querydsl이 기본 집계 쿼리에서 잘못된 SQL을 생성합니다.
sessionId 열이 포함 된 세션 테이블이 있습니다. max sessionId를 얻고 싶습니다.
내가 다음 쿼리를 실행합니다
QSessions session = QSessions.sessions;
HibernateSQLQuery query = new HibernateSQLQuery(sessionFactory.openSession(), new SQLServer2005Templates());
query.from(session).list(session.sessionId.max());
내있는 hibernate.cfg.xml :
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.url">jdbc:sqlserver://SVR;databaseName=DB</property>
<property name="hibernate.connection.username">X</property>
<property name="hibernate.connection.password">X</property>
<property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="hibernate.dialect">org.hibernate.dialect.SQLServer2008Dialect</property>
<mapping class="com.coveo.data.Sessions" />
</session-factory>
</hibernate-configuration>
내가 쿼리를 실행하면, 내가 Hibernate는 다음 SQL 쿼리를 실행하려고 시도 것을 볼 수있다 :
17:36:10.011 [main] DEBUG org.hibernate.SQL - select max(sessions.*.sessionId) as col__1 from sessions
이것은 유효한 SQL이 아닙니다. 나는
을 기대했을 것이다select max(sessions.sessionId) as col__1 from sessions
Hibernate는 쿼리를 실행하려고 할 때, 나는 다음과 같은 오류 얻을 :
com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '*'.
내가 SQL Management Studio를 사용하여 유효하지 않은 SQL 쿼리를 실행하려고 같은 구문 오류를 .
왜 Querydsl에는 방언이 필요합니까? Hibernate가 SQL 생성을 담당하고 있지 않습니까?
왜 생성 된 SQL이 유효하지 않습니까?
편집 : .avg(), .min() 또는 다른 집계 함수를 사용할 때 동일한 동작이 발생합니다.
[querydsl support/forums] (https://groups.google.com/forum/#!포럼/querydsl) 등? 여기 얼마나 많은 사람들이 querydsl에 익숙한 지 모르겠습니다. 왜 이런 방식으로 작동하는지 당신에게 말할 수는 없을 것입니다. –
@AaronBertrand : 최소한 21 세 이상이어야합니다. –
@AndriyM 내 생각을 분명히하지 않은 것 같습니다. 나는 숫자가 0이 될 것이라고 기대하지 않았지만 얼마나 많은 사람들이 지금 온라인 상태인지, 태그를보고 있는가? 지원 포럼부터 시작하겠습니다. –