【发布时间】:2016-08-21 23:44:18
【问题描述】:
我有一家餐桌公司:companyId number、companyName varchar、address nvarchar。
我想实现一个目标,用户可以使用 id 或公司名称查询以获取公司,图像有一个搜索框,用户只需输入一个值,然后它将获取公司信息。
我写了一个仓库
@Query(value = "select c from CompanyBasicInfo c where c.companyID = ?1 or c.companyName = ?1 ")
List<CompanyBasicInfo> findByCompanyIDOrCompanyName(@PathVariable String input);
但是当我查询时,我得到一个错误:Parameter value [10083769] did not match expected type [java.lang.Long (n/a)]
我该如何解决这个问题?大多数可用的材料都类似于
findByFirstnameOrLastname 使用两个值。非常感谢!
【问题讨论】:
-
如果是
id或company name,为什么不将方法调用包装在 if-statement 中,检查 Search-Param ( String) 仅由数字组成? :o -
@PathVariable看起来很奇怪。问题是因为公司 ID 是长的,你不能用字符串“?1”“=”它。您可能会使用select c from CompanyBasicInfo c where CAST(c.companyID AS String)= ?1 or c.companyName = ?1 -
@RC 这可行,但不鼓励使用,因为在搜索条件上使用分析函数效率低下。
-
@ArnaudDenoyelle 这就是为什么我说“闯入”:)
-
@Seth,我们为前端提供服务,所以你说的逻辑可以在那里完成,但提供一个服务并让前端只调用服务有点酷,而且简单的。 :)
标签: java hibernate spring-data-jpa jpql