Postgresql jpql查询中的like和nvl-springboot JPA

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

我正在尝试将下面的查询写入spring boot jpql(postgresql db)

我试图在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);
@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)时的大小写)上面的示例非常适合我