我已针对某些常见搜索功能实施了以下JPA Repository查询。 但是对于那个查询,由于age是一个整数值而映射参数是String值,我得到了一些例外,如下所示。有没有任何机制可以隐式地将参数转换为相关数据类型而不是我们这样做。谢谢。
使用通用参数查询
@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.
答案 0 :(得分:3)
您看到的问题与绑定本身无关。 Spring Data基本上绑定了您为命名参数searchText
赋予的值。
接下来发生的事情就是你的持久性提供程序从中构建了一些SQL,显然存在类型不匹配的情况。年龄似乎不是String
类型,是吗?也就是说,我认为尝试将任意String
绑定到一个整数(我猜是这样)是一个非常奇怪的方法。
SQL并不是真正构建为支持任意文本搜索功能,而模式正在帮助您检测无效标准(在这种情况下它会执行)。你有没有想过添加一个全文搜索商店(Elasticsearch,Solr等)并在那些文本搜索?