【问题标题】:Spring JPA can't pass parameter into quotesSpring JPA 无法将参数传递到引号中
【发布时间】:2020-05-24 15:06:18
【问题描述】:

我正在尝试向 PostgreSQL 发出请求,看起来像这样:

@Query(value = "SELECT t FROM Tasks t WHERE daterange(t.date_from, t.date_to) && daterange '(:dateFrom, :dateTo)'", nativeQuery = true)
Page<Task> findTest(@Param("dateFrom") String dateFrom,
                        @Param("dateTo") String dateFrom,
                        Pageable pageable);

dateFromdateTo 的结果值中,由于单引号,没有传递到:dateFrom:dateTo:dateFrom:dateTo 看起来像一个字符串。如果我删除引号,参数传递正常,但请求当然无效。 那么有没有办法将值传递给引用的(:dateFrom, :dateTo)

【问题讨论】:

  • 除了 Sebastion 在答案中所说的之外,您确定 daterange 需要字符串而不是 PostgreSQL 的日期/时间类型吗? JPA 支持将各种 Java DateCalendar 和(自 JPA 2.2 起)java.time 类转换为它们的数据库等价物......尽管您可能需要一个 @Temporal 注释来指定 which i> 要通过的日期/时间类型。
  • 你可以在这之间使用。

标签: java postgresql spring-boot jpa


【解决方案1】:

如果没有引号,查询将无法正常工作,因为您尝试使用以下方式获取数据:

获取任务 WHERE date > 2015 AND date > 2014 p>

基本上,如果您尝试从 2014 年 6 月 1 日开始执行任务,它会正常工作,但 date &gt; 2015 不会是真的。 所以我建议你把&amp;&amp;改成&lt;@,这样,如果我理解你的要求,任务日期范围就包含在使用参数构建的范围内。

Here 是一些不错的范围类型运算符。

【讨论】:

  • 谢谢!
猜你喜欢
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
  • 2014-11-19
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
相关资源
最近更新 更多