2015-09-08 4 views
3

Я использую данные весны JPA 1.8.2 и пытаюсь получить лучший результат. Я использую следующий методДанные весны Jpa findTop и findFirst ошибка генерации Неправильный синтаксис рядом с '@ P0'

LearningSession findTopBySourceAndExternalLmsSessionIdAndCourseCodeAndLearnerEnrollmentEnrollmentStatusOrderByIdAsc(String source, String externalLmsSessionId, String courseCode, String enrollmentStatus); 

Я попытался также путем удаления OrderBy

LearningSession findTopBySourceAndExternalLmsSessionIdAndCourseCodeAndLearnerEnrollmentEnrollmentStatus(String source, String externalLmsSessionId, String courseCode, String enrollmentStatus); 

В обоих случаях Hibernate генерирует следующий запрос. Просто используйте * для каждой вещи. Для того, по в конце order by learningse0_.id asc

select TOP ? learningse0_.* 
from LearningSession learningse0_ 
left outer join LearnerEnrollment learnerenr1_ on learningse0_.ENROLLMENT_ID=learnerenr1_.id 
where learningse0_.source=? 
and learningse0_.externalLmsSessionId=? 
and learningse0_.courseCode=? 
and learnerenr1_.enrollmentStatus=? 

Запрос прав Но я получаю следующее исключение

Hibernate: select TOP ? learningse0_.id as id1_47_, learningse0_.brandName as brandNam2_47_, learningse0_.courseApprovalId as courseAp3_47_, learningse0_.courseCode as courseCo4_47_, learningse0_.endTime as endTime5_47_, learningse0_.externalLmsSessionId as external6_47_, learningse0_.externalLmsUrl as external7_47_, learningse0_.isCourseMessageDisplay as isCourse8_47_, learningse0_.LANGUAGE_ID as LANGUAG15_47_, learningse0_.LEARNER_ID as LEARNER16_47_, learningse0_.ENROLLMENT_ID as ENROLLM17_47_, learningse0_.learningSessionGuid as learning9_47_, learningse0_.lmsProvider as lmsProv10_47_, learningse0_.redirectUrl as redirec11_47_, learningse0_.source as source12_47_, learningse0_.startTime as startTi13_47_, learningse0_.uniqueUserGuid as uniqueU14_47_ from LearningSession learningse0_ left outer join LearnerEnrollment learnerenr1_ on learningse0_.ENROLLMENT_ID=learnerenr1_.id where learningse0_.source=? and learningse0_.externalLmsSessionId=? and learningse0_.courseCode=? and learnerenr1_.enrollmentStatus=? order by learningse0_.id asc 
13:53:47.686 [main] DEBUG org.hibernate.engine.jdbc.spi.SqlExceptionHelper - could not extract ResultSet [n/a] 
com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '@P0'   
com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216) ~[sqljdbc4-4.0.jar:?] 

Что я делаю неправильно? Я пробовал First, Top1, First1 но результат - ошибка. Пожалуйста помоги.

Благодаря

+0

ли вы пытаетесь использовать '@Query (...)' аннотацию? Я думаю, это упростит это совсем немного. –

+0

hhm Я пробовал. Но я думаю, что не могу сделать это, как в JPA 'select top 1 ..'. Наконец, я использовал собственный запрос, используя '@ Query', и теперь все работает, но точка в том, что не так с этим методом. Он генерирует правильный запрос, но получает исключение ... «Нужно ли мне расширять мой репозиторий с помощью пейджинга или сортировки, предоставляемых Spring-Data-JPa?» В настоящее время мой репозиторий распространяется только на CrudRepository. – Basit

+0

JpaRepository простирает все, на что я верю. Единственное, что я могу придумать, это может быть проблема с вопросом или правописание. Это было очень долго, и для меня это было бы сложнее, чем аннотированный запрос. –

ответ

8

Не уверен, если это будет работать для вас, но я побежал в ту же ошибку, и после того, как много копать, я понял, что я использовал SqlServerDialect в моем JpaVendorAdapter, и когда я изменил его, чтобы быть более конкретно для SqlServer2012 (SqlServerDialect2012) ошибка ушла:

<bean id="jpaVendorAdapter" 
    class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
    <property name="database" value="SQL_SERVER" /> 
    <property name="databasePlatform" value="org.hibernate.dialect.SQLServer2012Dialect" /> 
    <property name="showSql" value="true" /> 
</bean> 
+0

Спасибо СООО много. Именно то, что мне было нужно, когда я попал в эту проблему в обновлении Spring. – LetsBeFrank

0

Я была такая же проблема с Hibernate 5 + Spring Data. Изменение диалекта на SQLServer2012Dialect сработало для меня.

общественного класса SQLServerNativeDialect расширяет SQLServer2012Dialect

Для справки :: https://hibernate.atlassian.net/browse/HHH-10032

Спасибо,