Я использую данные весны 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
но результат - ошибка. Пожалуйста помоги.
Благодаря
ли вы пытаетесь использовать '@Query (...)' аннотацию? Я думаю, это упростит это совсем немного. –
hhm Я пробовал. Но я думаю, что не могу сделать это, как в JPA 'select top 1 ..'. Наконец, я использовал собственный запрос, используя '@ Query', и теперь все работает, но точка в том, что не так с этим методом. Он генерирует правильный запрос, но получает исключение ... «Нужно ли мне расширять мой репозиторий с помощью пейджинга или сортировки, предоставляемых Spring-Data-JPa?» В настоящее время мой репозиторий распространяется только на CrudRepository. – Basit
JpaRepository простирает все, на что я верю. Единственное, что я могу придумать, это может быть проблема с вопросом или правописание. Это было очень долго, и для меня это было бы сложнее, чем аннотированный запрос. –