我正在尝试将以下查询写入spring boot jpql (postgresql db)中。
first_name
FROM
employees
WHERE
first_name LIKE concat(concat('%',nvl(:key,first_name) ),'%'); --This is oracle style query我正在尝试用JPQL编写相同的逻辑(我是JPA和JPL的新手,但我知道这个简单的逻辑,我们可以使用较少的查询实现,但上面提到的是更大查询的一部分)。
我尝试了下面的方法。但实际上却被卡住了。
@Query("select pe.packageName from PackageEntity pe where " +
"lower(pe.packageName) like " +
"case when :packageName is null then lower(pe.packageName) else concat('%',lower(:packageName),'%') end " )
List<String> getValues( @Param("packageName") String roomIDList);错误消息如下
org.postgresql.util.PSQLException: ERROR: function lower(bytea) does not exist Hint: No function matches the given name and argument types. You might need to add explicit type casts. Position: 190
老实说,我已经尝试了我能想到的所有可能的解决方案。在stackoverflow中发现同样的错误,但解决方案不匹配,我真的想在查询中发送空值,如果输入为空,则需要忽略验证,例如,如果输入参数为空,则我希望完全忽略验证。
发布于 2021-06-03 20:28:24
解决方案:-
@Query("select pe.packageName from PackageEntity pe where " +
":packageName is null or lower(pe.packageName) like
concat('%',lower(:packageName),'%')" )上面的变通方法实际上起作用了。
但是我在cotroller代码中实现了
if (search.getPackageName() == null) {
LOGGGER.info("Input Name is NULL");
search.setPackageName("==!@#$%^&*()!@#$%^&*()==");
LOGGGER.info("Input Name is set to Default " + search.getPackageName());
}
searchValue = repoPackage.getPackageAll(search.getPackageName());在repo中,条件如下-不确定解决方案是否是最好的,但它起作用了。这样,我就避免了向jpa发送任何null值。
where
(('==!@#$%^&*()!@#$%^&*()==' = :packageName)
or lower(pd.package_name) like concat('%', lower(:packageName), '%'))https://stackoverflow.com/questions/67812236
复制相似问题