如何解决使用“喜欢”运算符的自定义jpa查询中的类型不匹配错误
我正在尝试编写这样的选择(可从控制台使用)
select * from orders o where (o.id like '%1%')
使用
@Query("SELECT o from Order o where o.id like %:searchQuery%")
Page<Order> findAllBySearchQuery(Long searchQuery,Pageable pageable);
但是IDEA显示o.id具有Type mismatch: string type expected
,当我尝试调用该方法时,我得到了java.lang.IllegalArgumentException: Parameter value [%1%] did not match expected type [java.lang.Long (n/a)]
,
我找不到解决方案。我只找到了如何使用nativeQuery = true
来做到这一点,但它不支持Pageable
。
ID类型为bigint。 MariaDB。
解决方法
此处将字符串绑定到已经包含通配符的占位符的正确方法:
@Query("SELECT o from Order o where o.id like :searchQuery")
Page<Order> findAllBySearchQuery(String searchQuery,Pageable pageable);
使用findAllBySearchQuery
时,假设要查找包含数字10的任何searchQuery
,则应绑定到%10%
,类似于id
。例如,调用:
findAllbySearchQuery("%10%",somePageable);
这里还有另一个潜在的问题,即Order#id
的类型以及实际SQL表中的相应类型。理想情况下,它也应该是文本,否则尝试将文本与数字进行比较就没有意义。
编辑:假设您已将id
列显示为整数,则可以先将其转换为文本,然后再进行类似比较:
@Query("SELECT o from Order o where cast(o.id as string) like :searchQuery")
Page<Order> findAllBySearchQuery(String searchQuery,Pageable pageable);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。