JPA Query处理NULL参数值

gna*_*esh 6 jpa

我是JPA的新手,这是我的一个查询,我有几个参数作为查询的一部分,任何参数都可以是null值

@Query(value = "SELECT ord.purchaseOrderNumber,ord.salesOrderNumber,ord.quoteNumber"

            + " FROM Order ord WHERE ord.purchaseOrderNumber LIKE :poNumber%  "
            + " AND ord.salesOrderNumber LIKE :soNumber "
            + " AND ord.quoteNumber = :quoteNumber "
Run Code Online (Sandbox Code Playgroud)

上面的示例如果我的输入参数:quoteNumber为NULL则我不应该通过ord.quoteNumber = NULL进行过滤,那么如何避免这种情况

cca*_*mxc 11

您可以添加一组条件来"忽略"具有空值或空字符串的属性.

例如

+ " AND (ord.quoteNumber = :quoteNumber or :quoteNumber is null or :quoteNumber = '' ")
Run Code Online (Sandbox Code Playgroud)


Zie*_*elu 2

不幸的是,= 比较不适用于空值,因为您有谓词 IS NULL、IS NOT NULL。当 quoteNumber 为 null 和不为 null 时,这意味着您需要不同的查询。您可以在 Java 代码中检查 null,然后选择要调用的正确查询。如果订单、报价数字不能是空字符串 ("")(它们不应该),那么您可以将缺少给定数字表示为空字符串,并始终使用正常比较。只需记住设置您的数据库架构,列不能为空,并且它们的默认值为“”。顺便说一句,您的列名称建议数字,但您正在使用字符串比较,我希望它没问题。