JPA规范和.where子句中的null参数

4哈维尔

我写了两个规范,如果它们的参数为null,则返回null。

public static Specification<Prodotto> getProdottoByLineaSpec (String linea) {

        if (linea != null) {
            return (root, query, criteriaBuilder) -> {
                return criteriaBuilder.like((root.join("linea")).get("nome"), "%"+linea+"%");
            };
        }
        else return null;
    }

public static Specification<Prodotto> getProdottoByIngSpec (String ing) {

        if (ing != null) {
            return (root, query, criteriaBuilder) -> {
                return criteriaBuilder.like(((root.join("listaQuoteIng")).join("ing")).get("nome"), "%"+ing+"%");
            };
        }
        else return null;
    }

然后,我创建了第三个,它将前一个与子句中and运算符结合在一起where

public static Specification<Prodotto> getProdottoByMainTraits (String linea, String ing) {

        return Specification.where(getProdottoByLineaSpec(linea).and(getProdottoByIngSpec(ing)));
    }

现在,这是有趣的部分:

  • 如果ByLinea回报null,我得到一个nullPointerExceptioncheckPackageAccess解决时,where从句。
  • 如果ByIng返回return null,它将被忽略(应该这样),并且查询仅与另一个谓词匹配。
  • 如果我切换两个谓词,将其ByIng作为第一个谓词,然后ByLinea放在where子句中,则所有组合都可以工作。
亚历克斯·瓦卢斯基斯基

避免null从方法返回是一个好习惯

您可以使用criteriaBuilderjoin()忽略nullparameter Specification它总是产生true Predicate有相反的方法criteriaBuilderdisjunction()

public static Specification<Prodotto> getProdottoByLineaSpec (String linea) {
                        
    return (root, query, criteriaBuilder) -> {
        if (linea == null) {                 
            return criteriaBuilder.conjunction();
        }

        return criteriaBuilder.like((root.join("linea")).get("nome"), "%" + linea + "%");            
    }
}

附言:NullPointerException如果首先尝试访问方法,Specification则会得到提示要明确的是,它看起来像这样nulland

Specification.where(null.and(getProdottoByIngSpec(ing)));

但是,如果只有第二个Specificationnull这一个作品

Specification.where(getProdottoByLineaSpec(linea).and(null));

因为方法参数可以是null

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

T-SQL-在where和子句中使用参数

来自分类Dev

T-SQL-在where和子句中使用参数

来自分类Dev

NULL和WHERE子句中的空列选择失败

来自分类Dev

where 子句中的 case 语句使用 not like 和 is not null

来自分类Dev

JPA Criteria API 规范中 toPredicate() 方法和 And/Or/Not/Where 的区别<>

来自分类Dev

JPA:QueryCriteria where子句中的谓词和表达式

来自分类Dev

在where子句中使用OR条件和Null进行右外部联接-SQL SERVER

来自分类Dev

WHERE子句中的MySQL CAST和LIKE

来自分类Dev

在WHERE子句中合并CASE和BETWEEN

来自分类Dev

为什么 ON 子句和 WHERE 子句中的条件使结果不同?

来自分类Dev

非规范化表上的SQL(和JPA)排序参数

来自分类Dev

如果在 LEFT JOIN 和 WHERE 子句中找不到结果,如何在 MySQL 查询中返回 NULL 值

来自分类Dev

规范 OR 子句,in 和 isEmpty/isNull

来自分类Dev

Spring Data JPA-where子句中的许多列

来自分类Dev

JPA / HIBERNATE:如何在@where子句中传递值

来自分类Dev

where子句中的动态参数

来自分类Dev

where子句中的动态参数

来自分类Dev

将WHERE子句与BETWEEN和null日期参数一起使用

来自分类Dev

具有WHERE子句和Null的SQL Server参数化查询

来自分类Dev

where子句中的NULL值

来自分类Dev

WHERE子句中的不同和大小写

来自分类Dev

WHERE子句中UNION和BIND的目的,实现自动编号

来自分类Dev

SQL-减少SELECT和WHERE子句中的重复

来自分类Dev

WHERE子句中DATE和DATETIME之间的区别

来自分类Dev

为什么在“ WHERE”子句中使用“ = +”和“ = *”?

来自分类Dev

Presto-where子句中的静态日期和时间戳

来自分类Dev

存在子查询和WHERE子句中的OR导致UnknownError

来自分类Dev

如何在where子句中指定@filterColumn和@filterValue?

来自分类Dev

排除WHERE子句中的空白和空值

Related 相关文章

  1. 1

    T-SQL-在where和子句中使用参数

  2. 2

    T-SQL-在where和子句中使用参数

  3. 3

    NULL和WHERE子句中的空列选择失败

  4. 4

    where 子句中的 case 语句使用 not like 和 is not null

  5. 5

    JPA Criteria API 规范中 toPredicate() 方法和 And/Or/Not/Where 的区别<>

  6. 6

    JPA:QueryCriteria where子句中的谓词和表达式

  7. 7

    在where子句中使用OR条件和Null进行右外部联接-SQL SERVER

  8. 8

    WHERE子句中的MySQL CAST和LIKE

  9. 9

    在WHERE子句中合并CASE和BETWEEN

  10. 10

    为什么 ON 子句和 WHERE 子句中的条件使结果不同?

  11. 11

    非规范化表上的SQL(和JPA)排序参数

  12. 12

    如果在 LEFT JOIN 和 WHERE 子句中找不到结果,如何在 MySQL 查询中返回 NULL 值

  13. 13

    规范 OR 子句,in 和 isEmpty/isNull

  14. 14

    Spring Data JPA-where子句中的许多列

  15. 15

    JPA / HIBERNATE:如何在@where子句中传递值

  16. 16

    where子句中的动态参数

  17. 17

    where子句中的动态参数

  18. 18

    将WHERE子句与BETWEEN和null日期参数一起使用

  19. 19

    具有WHERE子句和Null的SQL Server参数化查询

  20. 20

    where子句中的NULL值

  21. 21

    WHERE子句中的不同和大小写

  22. 22

    WHERE子句中UNION和BIND的目的,实现自动编号

  23. 23

    SQL-减少SELECT和WHERE子句中的重复

  24. 24

    WHERE子句中DATE和DATETIME之间的区别

  25. 25

    为什么在“ WHERE”子句中使用“ = +”和“ = *”?

  26. 26

    Presto-where子句中的静态日期和时间戳

  27. 27

    存在子查询和WHERE子句中的OR导致UnknownError

  28. 28

    如何在where子句中指定@filterColumn和@filterValue?

  29. 29

    排除WHERE子句中的空白和空值

热门标签

归档