2014-07-08 11 views
1

我已经为某些常用搜索功能实现了以下JPA存储库查询。 但与该查询,由于年龄是一个整数值和映射参数是字符串值我有一些例外如下。有没有什么机制可以隐式地将参数转换为相关的数据类型,而不是我们这样做。谢谢。Spring数据JPA存储库查询 - 如何将@Param值映射到多个参数类型

查询与通用参数

@Query("select u from User u where u.firstname = :searchText or u.age = :searchText") 
    List<User> findBySearchText(@Param("searchText") String searchText); 

异常

Caused by: org.postgresql.util.PSQLException: ERROR: operator does not exist: integer = character varying 
Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts. 

回答

3

你看有没有关系的结合本身的问题。 Spring Data基本上绑定了您提供给指定参数searchText的值。

看起来接下来会发生的情况是,您的持久性提供程序会在其中存在明显类型不匹配的情况下从其中构建一些SQL。年龄似乎不是类型String,是吗?也就是说,我认为试图将一个任意的String绑定到一个整数(我猜这是一个非常奇怪的方法)。

SQL的构建并非真正支持任意文本搜索功能,而且模式正在帮助您检测无效标准(它在此情况下会执行此操作)。你有没有想过添加一个全文搜索商店(Elasticsearch,Solr之类的),并在那些文本搜索?

+0

亲爱的奥利弗,非常感谢值得完整解释。玩得开心!谢谢。 – Channa

相关问题