QueryDsl BooleanBuilder:如何创建比较列表内容的谓词?

问题描述

我有一个简单的示例:查找所有优先级大于1且active = true的项。

Item有一个类别列表,每个类别都有一个int字段,称为priority。 我正在尝试做类似的事情:

builder = new BooleanBuilder();
Predicate predicate = builder.and(item.categories.any(category.priority.goe(1).and(category.active.eq(true))));
Iterable<Item> iterable = itemRepository.findAll(predicate);

但是我找不到合适的方法吗?有人可以建议吗?

解决方法

您可以像下面一样使用BooleanExpression-

public List<Item> getItems() {
        QItem item = QItem.item;
        QCategory category = QCategory.category;
        BooleanExpression booleanExpression = item.categories.contains(
                JPAExpressions.selectFrom(category).
                  where(category.item.eq(item).
                   and(category.priority.eq(1000)
                           .and(category.active.eq(true)))));
        return (List<Item>) itemRepository.findAll(booleanExpression);
    }

这对我来说适用于版本4.3.1,但不适用于4.2.1。请检查this example using springboot

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...