我已经为一些常见的搜索功能实现了以下 JPA 存储库查询。 但是对于那个查询,由于年龄是一个整数值而映射参数是字符串值,我得到了一些异常如下。是否有任何机制可以将参数隐式转换为相关数据类型,而不是我们这样做。谢谢。
普通参数查询
@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.
最佳答案
您看到的问题与绑定(bind)本身无关。 Spring Data 基本上绑定(bind)了您给命名参数 searchText
的值。
看起来接下来发生的事情是您的持久性提供程序从它构建了一些显然类型不匹配的 SQL。 Age 好像不是String
类型吧?也就是说,我认为尝试将任意 String
绑定(bind)到一个整数(我猜是这样)首先是一种非常奇怪的方法。
SQL 并非真正为支持任意文本搜索功能而构建,模式可帮助您检测无效条件(在本例中它确实如此)。您是否考虑过添加全文搜索存储(Elasticsearch、Solr 等)并在其中进行文本搜索?
关于java - Spring Data JPA Repository Queries - 如何将@Param 值映射到多个参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24628726/