java - Spring Data JPA Repository Queries - 如何将@Param 值映射到多个参数类型

标签 java jpa spring-data

我已经为一些常见的搜索功能实现了以下 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/

相关文章:

java - 为什么 mock 对象的 getter() 返回 null?

java - 我只想在.jsp文件中写入jsp,jSTL

java - 如何在 Netbeans 8.0.15 中注册 Tomcat 服务器

multithreading - 如何确保多线程 JPA 应用程序中的单一操作

java - 使用 jpa 进行多次更新

hibernate - Spring Data + Hibernate 5 (Spring Boot 1.4) - 获取弃用消息

java - 第 1 行 '' 附近的 mysql 语法错误

java - 使用 ORM 时跟踪数据库字段的更改

spring - 使用 Spring Data REST 和 MongoDB 访问和更新关联资源

java - 无法延迟初始化角色 : User. 权限的集合,无法初始化代理 - 无 session