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