Search code examples
javaquerydsl

How to combine two OR statements with QueryDSL?


How to make the following statement in QueryDSL A OR (B AND C) ?


Solution

  • Let's say you have a Person Entity as follows

    @Entity
    public class Person {
        @Id
        @GeneratedValue(strategy = AUTO)
        private Long id;
        private String username;
        private Integer age;
    
        // Getter, Setter, Constructors as required
    
    }
    

    You have a query object like below

    QPerson personA = new QPerson("a");
    QPerson personB = new QPerson("b");
    QPerson personC = new QPerson("c");
    

    Assuming all are Person class query object

    You can create a Predicate like below

    BooleanExpression A = personA.username.eq("X");
    BooleanExpression B = personB.username.eq("Y");
    BooleanExpression C = personC.username.eq("Z");
    

    Then you can combine the BooleanExpression (Predicate) like below

    A.or(B.and(C))