Как правильно передать в CrudRepository в параметре @Param Дату (Spring BOOT)
Подскажите пожалуйста, как правильно передать дату в метод репозитория через @Param. Если я просто прописываю AND date > '2022-01-01' - то запрос нормально обрабатывается, но как только я хочу передать дату с Сервиса при помощи @Param("startDate") Date startDate я получаю ошибку.
Репозиторий : FinanceRepository extends CrudRepository
@Query("FROM Finance WHERE wallet.id =:walletId " +
"AND date > ':startDate'")
List<Finance> findFinanceByWalletDate(@Param("walletId") long walletId,
@Param("startDate") Date startDate);
Сервис :
public List<Finance> firstQuarter(Wallet wallet) {
String str = "2022-03-01";
java.sql.Date sqlDate = Date.valueOf(str);
return financeRepository.findFinanceByWalletDate(wallet.getId(),sqlDate);
}
Ошибка :
There was an unexpected error (type=Internal Server Error, status=500).
could not extract ResultSet; nested exception is org.hibernate.exception.GenericJDBCException: could not extract ResultSet
org.springframework.orm.jpa.JpaSystemException: could not extract ResultSet; nested exception is org.hibernate.exception.GenericJDBCException: could not extract ResultSet
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:331)
Ответы (2 шт):
Вам не нужно использовать кавычки в имени параметра при написании запроса в @Query при использовании поименованного параметра с @Param, поэтому вот так должно сработать:
@Query("FROM Finance WHERE wallet.id = :walletId AND date > :startDate")
List<Finance> findFinanceByWalletDate(@Param("walletId") long walletId,
@Param("startDate") Date startDate);
Всю необходимую информацию о правилах использования @Param с @Query можно найти с примерами в официальной документации spring-data-jpa по этой теме.
@Query("FROM Finance WHERE wallet.id =:walletId " +
"AND date > :startDate")
List<Finance> findFinanceTEST(@Param("walletId") long walletId,
@Param("startDate") LocalDateTime startDate);
Действительно проблема была в лишних кавычках, так же использовал LocalDateTime и все заработало. Спасибо за помощь :)