当前位置: 首页 > 知识库问答 >
问题:

两个日期之间的 jpa 查询

乐正晟
2023-03-14

这是我在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

共有2个答案

荀金鹏
2023-03-14

我对您的问题的看法是,您没有< code>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 版本,您需要或不编写自己的本地日期转换器,如上面的响应中所述。

轩辕晔
2023-03-14

您需要实现< code>AttributeConverter

import java.sql.Date;
import java.time.LocalDate;

@Converter(autoApply = true)
public class LocalDateAttributeConverter implements AttributeConverter<LocalDate, Date> {

    @Override
    public Date convertToDatabaseColumn(LocalDate locDate) {
        return locDate == null ? null : Date.valueOf(locDate);
    }

    @Override
    public LocalDate convertToEntityAttribute(Date sqlDate) {
        return sqlDate == null ? null : sqlDate.toLocalDate();
    }
}

有关详细信息,请参阅此链接。https://thoughts-on-java.org/persist-localdate-localdatetime-jpa/

 类似资料:
  • 我要做的是,我将传递一个日期,并需要检查该日期在和之间(例如,我将9月30日传递为日期,并需要找到所有在和之间具有9月30日的条目) 类似于?

  • 问题内容: 我从Stackoverflow那里获得了这段代码,并对其进行了少许更改以适应今天的日期。 我想检查今天是否适合两个日期之间。但这是行不通的。我想念什么? 问题答案: 编辑: 使用<=或> =来计算今天的日期 这是您的代码的正确答案。只需使用strtotime()php函数

  • 问题内容: 我有这个模型: 和存储库为 我想做的是,我将传递一个日期,并需要检查该日期在和之间(例如,我将9月30日作为日期传递,并且需要查找9月30日在其和之间的所有条目) 像什么? 问题答案: 您应该看一下参考文档。很好解释。 就您而言,我认为您不能在两者之间使用,因为您需要传递两个参数 之间 -findByStartDateBetween…其中x.startDate在?1和?2之间 根据您的

  • 问题内容: 我想查询一个mySQL表以提取两次和两次之间的数据。我知道如何使用“ between”调用对单个“ datetime”列执行此操作,但是我的列是一个“ date”列和一个“ time”列。我在网上可以找到的所有解决方案都是针对单个datetime列的。 我的范围从15:30的“ day1”到15:14的day1 + 1day 到目前为止,我可以获得以下范围(有效): 但是我显然需要合并

  • 问题内容: 我有一个和。我想获取这两个日期之间的日期列表。谁能帮助我指出查询中的错误。 这是一个变量。 问题答案: 您应该将这两个日期放在单引号之间,例如。 或可以使用 请记住,第一个日期是包含日期,但第二个日期是排除日期,因为它实际上是“ 2011/02/27 00:00:00”

  • 问题内容: 如何使用PHP查找两个日期之间的天数? 问题答案: