问题描述
我有一个简单的示例:查找所有优先级大于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。