具有单值的 JPA OR 条件

JPA OR condition with single value

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

如果 none 个公司的名称仅由数字组成,您可以创建 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);
}

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

您可以尝试使用 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);