Родной запрос весенней загрузки с нулевым параметром - PullRequest
0 голосов
/ 23 мая 2019

У меня есть собственный запрос в Spring Boot как таковой:

@Query(value = "SELECT t.* FROM Transaction t WHERE " +
    "t.datetime >= TO_TIMESTAMP(?1,'YYYY-MM-ddTHH:MI') " +
    "AND t.datetime < TO_TIMESTAMP(?2,'YYYY-MM-ddTHH:MI') " +
    "AND (t.location_1 = ?3 or ?3 is null) " +
    "LIMIT ?4",
    nativeQuery = true)
    List<Transaction> findBySearchTerms(@Param("fromDateTime") String fromDateTime,
            String toDateTime,
            Integer location1,
            Integer maxCount
            );

Для location1 он может быть нулевым.Когда я выполняю этот запрос с location1 null, он возвращает сообщение об ошибке: org.postgresql.util.PSQLException: ОШИБКА: оператор не существует: bigint = bytea

После чего я попытался привести к параметру 3:

"AND (?3 is null or t.location_1 = cast(?3 as bigint)) " +

Это также приводит к ошибке: org.postgresql.util.PSQLException: ОШИБКА: невозможно привести тип bytea к bigint.

Я искал похожие вопросы по stackoverflow и следовал за некоторыми изрекомендации, но это все еще не работает.Есть идеи?

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Просто измените ваш параметр в запросе следующим образом.

@Query(value = "SELECT t.* FROM Transaction t WHERE " +
    "t.datetime >= TO_TIMESTAMP(?1,'YYYY-MM-ddTHH:MI') " +
    "AND t.datetime < TO_TIMESTAMP(?2,'YYYY-MM-ddTHH:MI') " +
    "AND ( ?3 is null or t.location_1 = ?3) " +
    "LIMIT ?4",
    nativeQuery = true)
    List<Transaction> findBySearchTerms(@Param("fromDateTime") String fromDateTime,
            String toDateTime,
            Integer location1,
            Integer maxCount
            );
0 голосов
/ 23 мая 2019

У вас может быть два разных запроса для обработки Null и Not Null. Вызовите эти два метода, основанные на местоположении, является нулем или не нуль

@Query(value = "SELECT t.* FROM Transaction t WHERE " +
"t.datetime >= TO_TIMESTAMP(?1,'YYYY-MM-ddTHH:MI') " +
"AND t.datetime < TO_TIMESTAMP(?2,'YYYY-MM-ddTHH:MI') " +
"AND (t.location_1 = ?3 ) " +
"LIMIT ?4", nativeQuery = true)

@Query(value = "SELECT t.* FROM Transaction t WHERE " +
"t.datetime >= TO_TIMESTAMP(?1,'YYYY-MM-ddTHH:MI') " +
"AND t.datetime < TO_TIMESTAMP(?2,'YYYY-MM-ddTHH:MI') " +
"AND (t.location_1 is null) " +
"LIMIT ?4",
nativeQuery = true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...