Как использовать: в @Query в репозитории Spring Framework JPA.Не дубликат? - PullRequest
1 голос
/ 19 сентября 2019

Мне нужно использовать: в одном из кодов репозитория, но он постоянно выдает ошибку

org.hibernate.QueryException: Space is not allowed after parameter prefix ':' [SELECT (@row_number //:=@row_number+1) AS num, schedule_date FROM TestTable.tbl_doc_package, (SELECT @row_number:=0) AS t ; ]; nested exception is java.lang.IllegalArgumentException: org.hibernate.QueryException: Space is not allowed after parameter prefix ':' [SELECT (@row_number:=@row_number+1) AS num, schedule_date FROM TestTable.tbl_doc_package, (SELECT @row_number:=0) AS t ; ]"

Я уже пробовал множество похожих вопросов и ответов, которые предлагали:

1) Использоватьвнутри одинарной кавычки ': =' OR ': ='

2) Использовать \ или \ перед:

3) Обновить до спящего режима 4.xx или 5.xx Я не могуполучить версию hibernate, которую использует мой проект.Я добавил

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.4.5.Final</version>
</dependency>

после того, как обнаружил, что должен использовать последнюю версию Hibernate, но это не имеет никакого значения.Как уже говорилось ранее, я не могу определить, какую версию Hibernate использует мой проект.

@Repository
public interface DocPackageRepository extends JpaRepository<DocPackage, Integer> {

    @Query(value = "SELECT (@row_number:=@row_number+1) AS num, schedule_date FROM TestTable.tbl_doc_package, (SELECT @row_number:=0) AS t ; ", nativeQuery = true)
    List<Date> addDocPackageManifestVoyageTest();
}

Я также прочитал, что мне может понадобиться использовать функции sql, но я не могу понять, как ониработа в моем контексте.

1 Ответ

1 голос
/ 19 сентября 2019

Вы не отобразили все, что пытались.Однако вместо использования // вы можете использовать \\ двойной обратный слеш (без кавычек).Один \ для спящего режима, чтобы избежать: символа.Другой - для Java, поскольку он не будет компилироваться с \:=.

. Убедитесь, что вы используете \\=: при both positions в своем запросе, поскольку вы использовали его только в одном месте.

SELECT (@row_number \\:=@row_number+1) AS num, schedule_date FROM TestTable.tbl_doc_package, (SELECT @row_number \\:=0) AS t ;

Вы также можете проверить org.hibernate.QueryException: пробел не допускается после префикса параметра ':'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...