Module io.ebean.api
Package io.ebean

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()
      .order().asc("name");

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

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