我正在尝试使用 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
任何人都可以帮我构建相同的查询吗?
如果您正在使用 JPQL 并且仍然收到此错误,那么可能您之间可能有空格
where id = : myId
应该是
where id = :myId
从
:
中移除 :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);
无论如何,如果您遇到这个问题。在进行调试或深度谷歌搜索之前,请检查以下事项
方法变量名称和您的查询变量是否匹配。
使用您的参数查询分号
如果您使用短表达式重命名了表,请仔细检查它们是否正确使用。
检查您的查询语法。
因为大部分问题都是由上述的小错误造成的。
我有同样的错误,但在我的例子中,我有一个比较运算符“<>”连接到我的变量,中间没有空格。在变量和运算符之间添加空格解决了我的问题。 IE。将
:addressType<>
更改为 :addressType <>
有效
通常,当您编写本机查询时,您可能会在存储库代码上换行。像这样:
String value = "select from People " + "where id = :id" + "and address = :address"
错误将显示: 命名参数未绑定:idand
请注意,存储库按顺序连接了 2 个字符串,并更改了参数名称和引用。
正确的做法是这样的:
String value = "select from People " + "where id = :id " + "and address = :address"