java - 列表元素的两个条件的 boolean 表达式

标签 java spring-data-jpa querydsl boolean-expression

我在这里使用 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/

相关文章:

java - 使用错误的小数分隔符在 Android 中格式化货币

java - 在 Spring Boot 中连接到任何一个数据库

h2 - QueryDSL:如何插入或更新?

java - 通过java比较xml并像diff工具一样呈现

java - 新的 MySQL 驱动程序导致 java.sql.SQLNonTransientConnectionException : CLIENT_PLUGIN_AUTH is required

Java 程序不一定从 main() 开始,对吧?

java - 如何使用 QueryDSL 获取序列 nextval?

spring-boot - 如何从 Spring Boot 应用程序的所有子包中注册 bean?

spring - 如何使用 Spring Data JPA 连接两个表

java - 如何在 querydsl 中使用别名?