当某些字段可以为 NULL 时,我可以使用对象作为 JPA 中标准查询的谓词吗?

用户2867999

我有一个对象,我们称它为 Person:

@Entity
@Table(name = "PERSON")
public class Person extends PersistentObject {

    @Id
    @Column(name = "NAME")
    private String name;

    @Column(name = "AGE")
    private String age;

    @Column(name = "NICKNAME")
    private String nickname;

    @Column(name = "HAIR_COLOR")
        private String hairColor;
.
.
.

我想将此对象用作使用谓词的 CriteriaQuery 的过滤器,但是当某些输入 Obj 为 NULL(例如,NickName)时,它会中断查询。这是我目前拥有的代码示例。

public List<Person> getPeople(List<Person> peopleToGet) 
    {     
        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<Person> cq = cb.createQuery(Person.class);
        Root<Person> e = cq.from(Person.class);

        List<Predicate> predicates = new ArrayList<Predicate>();

        for(Person person : peopleToGet)
        {
            predicates.add(cb.or(cb.and(
                    cb.equal(e.get("name"), person.getName()),
                    cb.equal(e.get("age"), person.getAge()),
                    cb.equal(e.get("nickname"), person.getNickname()),
                    cb.equal(e.get("hairColor"), person.getHairColor())
                    )));
.
.
.

当对象值并不总是相同时,是否可以将对象用作过滤器?

示例输入:[{"name":"Bob","age":"30"},{"name":"William","nickname":"Bill"}]

在这个例子中,我想获取 PERSON 表中的每个人,其中:人名是鲍勃,年龄是 30 岁,或者人名是威廉,昵称是比尔

对不起,如果这个例子有点不清楚,我已经更改了代码以使其尽可能容易地转换为其他示例。在过去的几个月里,我对 JPA 的一般知识充其量只是自学(阅读,谷歌)。对此的任何帮助将不胜感激。谢谢!!

尼科斯·帕拉斯凯沃普洛斯

根据您所说的,您希望应用一个标准,如果 bean 的相关属性不是null并且不应用,如果该属性 null. 为此,您必须创建一个列表,然后转换为一个数组以作为参数提供给and()(就像使用List<Predicate> predicates):

for( Person person : peopleToGet ) {
    List<Predicate> andPredicates = new ArrayList<>();

    if( person.getName() != null ) andPredicates.add(cb.equal(e.get("name"), person.getName()));
    if( /* similar code for the other properties */ ) /* ... */;

    predicates.add(cb.or(cb.and( andPredicates.toArray(new Predicate[andPredicates.size()]) )));
}

上面的代码假设并非所有的属性Person都是null! 如果可能,您必须相应地防范这种情况!

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当字段值可以为null或不为null时,如何在groovy中编写查询

来自分类Dev

当字段值可以为null或不为null时,如何在groovy中编写查询

来自分类Dev

EventArgs可以为null吗?

来自分类Dev

EventArgs可以为null吗?

来自分类常见问题

获取最新记录,字段可以为null

来自分类Dev

获取最新记录,字段可以为null

来自分类Dev

@ManyToOne JPA关系可以为空吗?

来自分类Dev

Spring数据JPA和参数可以为null

来自分类Dev

我可以使用 JPA 将对象类型映射到表吗?

来自分类Dev

CakePHP 3.x:查询以排除其中字段可以为NULL或为空(“)的记录

来自分类Dev

根据字段排序对象列表,可以为null

来自分类Dev

根据字段排序对象列表,可以为null

来自分类Dev

我可以使用JPA通过查询语言更新表的多列吗

来自分类Dev

Java可变参数可以为null吗?

来自分类Dev

Rcpp :: Function可以为NULL吗?

来自分类Dev

Rcpp :: Function可以为NULL吗?

来自分类Dev

我可以使用日期对象作为JSON对象javascript中的键吗?

来自分类Dev

我可以使用null代替Kotlin中的isInitialized吗?

来自分类Dev

我可以使用`export`作为“ module.export`”导出对象吗?

来自分类Dev

我可以使用非日期类型作为Julia中TimeSeries对象的时间索引吗?

来自分类Dev

我们可以使用从WinForms控件继承的对象作为.NET Hashtable的键吗?

来自分类Dev

我可以使用包含变量的模板文字作为对象键吗?

来自分类Dev

创建新对象时可以使用列表作为属性吗?

来自分类Dev

可以使用自动查询来查找NULL值吗?

来自分类Dev

我可以为字段定义“因子”数据类型吗?

来自分类Dev

使用 setstate 时,我可以使用如下所示的简单对象吗?

来自分类Dev

getComuptedStyle可以为某些属性返回undefined吗?

来自分类Dev

我的域对象在需要时可以使用工厂方法或工厂层吗?

来自分类Dev

我可以使用assign复制对象的对象吗?

Related 相关文章

  1. 1

    当字段值可以为null或不为null时,如何在groovy中编写查询

  2. 2

    当字段值可以为null或不为null时,如何在groovy中编写查询

  3. 3

    EventArgs可以为null吗?

  4. 4

    EventArgs可以为null吗?

  5. 5

    获取最新记录,字段可以为null

  6. 6

    获取最新记录,字段可以为null

  7. 7

    @ManyToOne JPA关系可以为空吗?

  8. 8

    Spring数据JPA和参数可以为null

  9. 9

    我可以使用 JPA 将对象类型映射到表吗?

  10. 10

    CakePHP 3.x:查询以排除其中字段可以为NULL或为空(“)的记录

  11. 11

    根据字段排序对象列表,可以为null

  12. 12

    根据字段排序对象列表,可以为null

  13. 13

    我可以使用JPA通过查询语言更新表的多列吗

  14. 14

    Java可变参数可以为null吗?

  15. 15

    Rcpp :: Function可以为NULL吗?

  16. 16

    Rcpp :: Function可以为NULL吗?

  17. 17

    我可以使用日期对象作为JSON对象javascript中的键吗?

  18. 18

    我可以使用null代替Kotlin中的isInitialized吗?

  19. 19

    我可以使用`export`作为“ module.export`”导出对象吗?

  20. 20

    我可以使用非日期类型作为Julia中TimeSeries对象的时间索引吗?

  21. 21

    我们可以使用从WinForms控件继承的对象作为.NET Hashtable的键吗?

  22. 22

    我可以使用包含变量的模板文字作为对象键吗?

  23. 23

    创建新对象时可以使用列表作为属性吗?

  24. 24

    可以使用自动查询来查找NULL值吗?

  25. 25

    我可以为字段定义“因子”数据类型吗?

  26. 26

    使用 setstate 时,我可以使用如下所示的简单对象吗?

  27. 27

    getComuptedStyle可以为某些属性返回undefined吗?

  28. 28

    我的域对象在需要时可以使用工厂方法或工厂层吗?

  29. 29

    我可以使用assign复制对象的对象吗?

热门标签

归档