首页 > 解决方案 > 两个日期之间的jpa查询

问题描述

这是我在 SQL Server 上的查询:

select count(*) from noleggi 
where id_utente = 1 AND id_libro =25 and GETDATE() BETWEEN inizio_prestito AND fine_prestito

使用 JPA 存储库的正确语法是什么?

我试过这个:

@Query(value = "SELECT COUNT(n) from Noleggio n " +
            "WHERE  n.libroId = ?1 AND n.utenteId=?2 AND CURRENT_DATE() BETWEEN n.inizioPrestito AND n.finePrestito")

    Long countByUtenteIdAndLibroId(Long idLibro, Long idUtente, LocalDate inizioPrestito, LocalDate finePrestito);

并收到此错误:

查询方法 public abstract java.lang.Long com.finance.biblioteca.repository.NoleggioRepository.countByUtenteIdAndLibroId(java.lang.Long,java.lang.Long,java.time.LocalDate,java.time.LocalDate 的验证失败

标签: javaspringjpa

解决方案


我对您的问题的想法是您没有BETWEEN. 您只需将字段作为名称而不是作为索引参数。您的代码应如下所示:

@Query(value = "SELECT COUNT(n) from Noleggio n " +
            "WHERE  n.libroId = ?1 AND n.utenteId=?2 AND CURRENT_DATE() BETWEEN ?3 AND ?4")

    Long countByUtenteIdAndLibroId(Long idLibro, Long idUtente, LocalDate inizioPrestito, LocalDate finePrestito);

根据您的 JPA 版本,您是否需要编写自己的LocalDateConverter,如上面的响应中所述。


推荐阅读