未绑定命名参数:Spring Boot 中的 DATE_FORMAT 本机查询

问题描述 投票:0回答:5

我正在尝试使用 Spring Boot 中的 MySQL 本机查询在 dateFrom 和当前日期之间使用选择查询来获取表数据作为列表。而MySQL数据库字段数据类型是String。

以下是存储库中的查询:

@Query(value = "select * from Account where DATETIMESTAMP >= :dateFrom  AND DATETIMESTAMP < :DATE_FORMAT(curdate(), '%d/%m/%Y')", nativeQuery = true)
List<Account> findByDate(@Param("dateFrom") String dateFrom);

在 Spring Boot 中上述查询出现以下错误:

 Named parameter not bound : DATE_FORMAT; nested exception is org.hibernate.QueryException: Named parameter not bound : DATE_FORMAT

任何人都可以帮我构建相同的查询吗?

java mysql spring-boot spring-data-jpa
5个回答
5
投票

如果您正在使用 JPQL 并且仍然收到此错误,那么可能您之间可能有空格

where id = : myId

应该是

where id = :myId

4
投票

:
中移除
:DATE_FORMAT(curdate(), '%d/%m/%Y')
:
用于绑定jpa查询中的参数。在
:
前面添加
DATE_FORMAT
使
JPA
将其视为参数。 所以最终的查询应该是

@Query(value = "select * from Account where DATETIMESTAMP >= :dateFrom  AND DATETIMESTAMP < DATE_FORMAT(curdate(), '%d/%m/%Y')", nativeQuery = true)
List<Account> findByDate(@Param("dateFrom") String dateFrom);

4
投票

无论如何,如果您遇到这个问题。在进行调试或深度谷歌搜索之前,请检查以下事项

  1. 方法变量名称和您的查询变量是否匹配。

  2. 使用您的参数查询分号

  3. 如果您使用短表达式重命名了表,请仔细检查它们是否正确使用。

  4. 检查您的查询语法。

因为大部分问题都是由上述的小错误造成的。


1
投票

我有同样的错误,但在我的例子中,我有一个比较运算符“<>”连接到我的变量,中间没有空格。在变量和运算符之间添加空格解决了我的问题。 IE。将

:addressType<>
更改为
:addressType <>
有效


0
投票

通常,当您编写本机查询时,您可能会在存储库代码上换行。像这样:

String value = "select from People " + "where id = :id" + "and address = :address"

错误将显示: 命名参数未绑定:idand

请注意,存储库按顺序连接了 2 个字符串,并更改了参数名称和引用。

正确的做法是这样的:

String value = "select from People " + "where id = :id " + "and address = :address"
© www.soinside.com 2019 - 2024. All rights reserved.