Java 使用“like”运算符的自定义jpa查询中存在类型不匹配错误

Java 使用“like”运算符的自定义jpa查询中存在类型不匹配错误,java,sql,spring,jpa,Java,Sql,Spring,Jpa,我正试图写这样的选择它从控制台工作 select * from orders o where (o.id like '%1%') 与 但IDEA显示o.id的类型不匹配:应为字符串类型,当我尝试调用该方法时,我得到java.lang.IllegalArgumentException:参数值[%1%]与预期类型[java.lang.Long n/a]不匹配, 我找不到解决这个问题的办法。我只找到了如何使用nativeQuery=true执行此操作,但它不支持分页 id的类型是bigint。Mar

我正试图写这样的选择它从控制台工作

select * from orders o where (o.id like '%1%')

但IDEA显示o.id的类型不匹配:应为字符串类型,当我尝试调用该方法时,我得到java.lang.IllegalArgumentException:参数值[%1%]与预期类型[java.lang.Long n/a]不匹配, 我找不到解决这个问题的办法。我只找到了如何使用nativeQuery=true执行此操作,但它不支持分页


id的类型是bigint。MariaDB.

将字符串绑定到已包含通配符的占位符的正确方法:

@Query("SELECT o from Order o where o.id like :searchQuery")
Page<Order> findAllBySearchQuery(String searchQuery, Pageable pageable);
这里还有另一个潜在的问题,即Orderid的类型,以及实际SQL表中相应的类型。理想情况下,它也应该是文本,否则尝试将文本与数字进行比较是没有意义的

编辑:鉴于您已将id列显示为整数,您可以尝试先将其强制转换为文本,然后再进行类似的比较:

@Query("SELECT o from Order o where cast(o.id as string) like :searchQuery")
Page<Order> findAllBySearchQuery(String searchQuery, Pageable pageable);

仍然没有任何变化。id的类型是什么?你的数据库是什么?在许多SQL数据库中,无法将文本与数字进行比较。id的类型为bigint,MariaDB。但我可以将其与select*from orders o进行比较,o.id为“%1%”,一切正常。从控制台。@Konstantin在我更新的答案中尝试第二个版本。IDEA在“cast”后的括号内加下划线,并写入、分组、拥有或订购预期的内容。但它是有效的。以某种方式我仍然不明白为什么它在控制台中不进行任何强制转换就可以工作。请注意,需要将整型列与类似文本的表达式进行比较可能意味着数据库设计不佳。我正在尝试将long值与bigint列中的db值进行比较。问题是我需要获取所有包含搜索值的数字。
findAllbySearchQuery("%10%", somePageable);
@Query("SELECT o from Order o where cast(o.id as string) like :searchQuery")
Page<Order> findAllBySearchQuery(String searchQuery, Pageable pageable);