Postgresql jpql查询中的like和nvl-springboot JPA
我正在尝试将下面的查询写入spring boot jpql(postgresql db) 我试图在JPQL中编写相同的逻辑(我对JPA和JPL不熟悉,但我知道这个简单的逻辑,我们可以使用较少的实现问题来实现,但上面提到的是更大查询的一部分) 我试着像下面那样。但事实上,它被卡住了Postgresql jpql查询中的like和nvl-springboot JPA,postgresql,spring-boot,hibernate,spring-data-jpa,Postgresql,Spring Boot,Hibernate,Spring Data Jpa,我正在尝试将下面的查询写入spring boot jpql(postgresql db) 我试图在JPQL中编写相同的逻辑(我对JPA和JPL不熟悉,但我知道这个简单的逻辑,我们可以使用较少的实现问题来实现,但上面提到的是更大查询的一部分) 我试着像下面那样。但事实上,它被卡住了 @Query("select pe.packageName from PackageEntity pe where " + "lower(pe.packageN
@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);
@Query(“从PackageEntity pe where中选择pe.packageName”+
“较低(pe.packageName)类”+
“当:packageName为null时,则为lower(pe.packageName)else concat('%',lower(:packageName),'%')end”)
列出getValues(@Param(“packageName”)字符串roomIDList);
错误信息如下
org.postgresql.util.psqleexception:错误:函数lower(bytea)不存在提示:没有与给定名称和参数类型匹配的函数。您可能需要添加显式类型转换。职位:190
老实说,我已经尝试了我能想到的所有可能的解决办法。在stackoverflow中发现相同的错误,但解决方案不匹配,我确实希望在查询中发送null值,如果输入为null,则需要忽略验证,例如,如果输入参数为null,则我希望完全忽略验证。解决方案:-
@Query("select pe.packageName from PackageEntity pe where " +
":packageName is null or lower(pe.packageName) like
concat('%',lower(:packageName),'%')" )
上述解决方法实际上起了作用
@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);
但我实现了类似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());
在回购协议中,条件如下——不确定解决方案是否是最好的,但它奏效了。像这样,我避免将任何null
值发送到jpa
where
(('==!@#$%^&*()!@#$%^&*()==' = :packageName)
or lower(pd.package_name) like concat('%', lower(:packageName), '%'))
是字符串的packageName字段吗?错误消息显示未找到函数lower(bytea)@Query(“从用户u中选择u.name,其中lower(u.name)类似(当:name为null,然后lower(u.name)else concat(“%”,lower(:name),“%”)end)时的大小写)上面的示例非常适合我