我在Spring存储库中有此请求
@Query("Select l from Loan l WHERE (:status is null or l.currentStatus = upper(:status)) and (:id is null or l.user.id = :id)")
List<Loan> findByCurrentStatusAndUserId(@Param("status") String status, @Param("id")Long id);
如果参数为空,则应该忽略这些参数,除了它会向我发送一个:
org.postgresql.util.PSQLException: ERREUR: la fonction upper(bytea) n'existe pas
(function upper(bytea) doesn't exists)
如果我的状态参数为null。这对我来说没有意义。如果为null,则不应该对其进行测试,这就是放置“:status为null”的全部要点。我如何在不为业务层做大条件之前就测试我的参数的情况下进行处理?
您的问题是,您正在对null的参数使用上层函数,因为无论您的空状态如何,postgreSql都像upper(null)
一样解释它,在查询中存在一些没有解决方案的相对问题,因此我建议您应用上层在列中(而不是参数中),并从java中将param的上一句设为param: