【问题标题】:QueryDsl BooleanBuilder: How to create a predicate that compares contents of list?QueryDsl BooleanBuilder:如何创建一个比较列表内容的谓词?
【发布时间】:2020-12-01 19:20:03
【问题描述】:

我有一个简单的例子:查找所有类别优先级 > 1 且 active = true 的项目。

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

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);

但我找不到正确的使用方法?有人可以建议吗?

【问题讨论】:

    标签: java sql querydsl boolean-expression


    【解决方案1】:

    你可以像下面这样使用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

    【讨论】:

      猜你喜欢
      • 2016-07-12
      • 1970-01-01
      • 2021-11-22
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      相关资源
      最近更新 更多