具有单值的 JPA OR 条件
JPA OR condition with single value
我有一家 table 公司: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
使用两个值。非常感谢!
如果 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);
我有一家 table 公司: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
使用两个值。非常感谢!
如果 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);