Interface Junction<T>

All Superinterfaces:
Expression, ExpressionList<T>

public interface Junction<T> extends Expression, ExpressionList<T>
Represents a Conjunction or a Disjunction.

Basically with a Conjunction you join together many expressions with AND, and with a Disjunction you join together many expressions with OR.

Note: where() always takes you to the top level WHERE expression list.

Query q =
    DB.find(Person.class)
      .where()
        .or()
          .like("name", "Rob%")
          .eq("status", Status.NEW)

      // where() returns us to the top level expression list
      .where().gt("id", 10);

// read as...
// where ( ((name like Rob%) or (status = NEW)) AND (id &gt; 10) )

Note: endJunction() takes you to the parent expression list


Query q =
    DB.find(Person.class)
      .where()
        .or()
          .like("name", "Rob%")
          .eq("status", Status.NEW)
          .endJunction()

          // endJunction().. takes us to the 'parent' expression list
          // which in this case is the top level (same as where())

        .gt("id", 10);

// read as...
// where ( ((name like Rob%) or (status = NEW)) AND (id > 10) )

Example of a nested disjunction.

Query<Customer> q =
 DB.find(Customer.class)
     .where()
       .or()
         .and()
           .startsWith("name", "r")
           .eq("anniversary", onAfter)
           .endAnd()
         .and()
           .eq("status", Customer.Status.ACTIVE)
           .gt("id", 0)
           .endAnd()
     .orderBy().asc("name");

q.findList();
String s = q.getGeneratedSql();

 // this produces an expression like:
 ( name like ? and c.anniversary = ? ) or (c.status = ?  and c.id > ? )