具有单值的JPA OR条件

时间:2016-04-27 15:10:30

标签: java hibernate spring-data-jpa jpql

我有一家餐桌公司:companyId numbercompanyName varcharaddress 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使用两个值。非常感谢!

2 个答案:

答案 0 :(得分:1)

如果没有公司的名称只包含数字,您可以创建2个方法(按companyId /公司名称)并检查您的输入是否为数字。

如果您不想这样做,可以使用“2 params”版本:

List<CompanyBasicInfo> findByCompanyIDOrCompanyName(Long companyId, String companyName);

然后解析你的输入:

List<CompanyBasicInfo> find(String input) {
  Long companyId = null;
  try {
    companyId = Long.valueOf(input);
  } catch(Exception ignored){}

  return repository.findByCompanyIDOrCompanyName(companyId, input);
}

答案 1 :(得分:-1)

这不是参数数量的问题,而是其类型

的问题

您可以尝试使用 cast 函数将companyId视为查询中的字符串,如此处所示。 How do I write hql query with cast?

您的代码看起来像

@Query(value = "select c from CompanyBasicInfo c where cast(c.companyID as String) = ?1 or c.companyName = ?1 ")
List<CompanyBasicInfo> findByCompanyIDOrCompanyName(@PathVariable String input);