Как использовать '::' в весенней загрузке? - PullRequest
0 голосов
/ 28 октября 2019

как использовать запрос от загрузки Postgre к Spring?

Я использовал этот запрос для получения данных в postgre

"SELECT * FROM mytable WHERE delivery_date :: date ='2019-10-28' предел 10; "

Я пытаюсь запустить огонь покоя с такой сущностью

@Entity
@Table(name ="mytable")
public class DeliveryDataEntity implements Serializable {
@Column(name="delivery_date")
private Date delivery_date;

@Column(name="delivery_name")
private String delivery_name;

@Id
@Column(name="delivery_id")
private int delivery_id;
}

и моим кодом репо, подобным этому

@Repository
public interface DeliveryDataRepository extends PagingAndSortingRepository<DeliveryDataEntity, Date>{
@Query(value="SELECT * FROM mytable WHERE delivery_date = ?1", nativeQuery = true)
Page<DeliveryDataEntity> findByUserAndStatusOrderByCreatedAtDesc(Date delivery_date, PageRequest pageRequest
            );
}

Если я запускаю, ошибок нет, но данные не читаются. Я попытался изменить запрос так, чтобы он был таким:

@Query(value="SELECT * FROM mytable WHERE delivery_date >= ?1", nativeQuery = true)

and
Query(value="SELECT * FROM accounts_data WHERE updated \\= ?1", nativeQuery = true)

, но, если я запустил его, он получит null результатов.

как мне решить эту проблему? спасибо

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Я думаю, вам не нужен оператор (: :). Если вы хотите учитывать только даты (без учета времени), вы можете использовать аннотацию @Temportal, как описано в этом учебном пособии по Baeldung .

Кроме того, я думаю, вам не нужно использоватьнативные запросы.

0 голосов
/ 28 октября 2019

Предполагая, что вероятной проблемой является оператор приведения с двойным двоеточием (::), который не нравится Spring Boot, вы можете попробовать рефакторинг запроса, чтобы вместо него использовать диапазон:

SELECT *
FROM mytable
WHERE delivery_date >= '2019-10-28' AND delivery_date < '2019-10-29'
ORDER BY <some column>
LIMIT 10;

Логика в предложении WHERE просто гласит, что нужно найти все записи, даты доставки которых происходят в полночь 28 октября 2019 года или после этой даты и строго до полуночи следующего дня следующего дня.

JPA/ Hibernate также может поддерживать использование функции CAST, поскольку Postgres реализует CAST, поэтому эта версия также может работать:

SELECT *
FROM mytable
WHERE (CAST delivery_date AS date) = '2019-10-28'
ORDER BY <some column>
LIMIT 10;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...