Spring Data JPA存储库查询 - 如何将@Param值映射到多个参数类型

时间:2014-07-08 09:49:17

标签: java jpa spring-data

我已针对某些常见搜索功能实施了以下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.

1 个答案:

答案 0 :(得分:3)

您看到的问题与绑定本身无关。 Spring Data基本上绑定了您为命名参数searchText赋予的值。

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

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