我在这里使用 QueryDSL 来构建一个谓词,问题是这个谓词需要两个 AND 条件,而我被困在这里,因为我不知道如何应用第二个条件。
这是场景:
我有一个设备,这个设备属于一个实验室,该实验室有一个团队。该实验室团队的一些成员可以注册新设备,有些则不能,这是由 boolean 属性“registerEquipment”定义的。所以我的谓词必须满足以下条件:
*用户必须是实验室团队的成员,并且将属性“registerEquipment”设置为 true 才能查看此设备。我尝试了以下代码:
BooleanExpression registerEquipmentAndTeamMember = QEquipment.equipment.laboratory.team.any().registerEquipment.and(QEquipment.equipment.laboratory.team.any().person.id.eq("AQ88"));
但是不起作用,因为它首先执行 registerEquipment 然后是 teamMember 的条件。我想知道如何同时为团队成员执行这两个条件。
最佳答案
我明白了。我必须使用 JPAExpression。这是正确的代码:
QEquipment equipment = QEquipment.equipment;
QTeam team = QTeam.team;
QLaboratory laboratory = QLaboratory.laboratory;
Predicate predicate = JPAExpressions
.selectOne()
.from(team)
.where(equipment.laboratory.id.eq(laboratory.id),
laboratory.id.eq(team.laboratory.id),
team.registerEquipment.eq(Boolean.TRUE),
team.person.id.eq(userService.getCurrentId())).exists();
现在它会同时过滤有权限注册设备的实验室成员。
关于java - 列表元素的两个条件的 boolean 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57698286/