API de criterios JPA: cómo agregar una cláusula JOIN (lo más general posible)

Estoy tratando de construir consultas dinámicamente, y mi próximo objetivo es agregar cláusulas JOIN (no sé cómo puedo usar la API).

Por ahora, por ejemplo, este código funciona para mí:

...
Class baseClass;   
...
CriteriaBuilder cb = JpaHandle.get().getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery(this.baseClass);
Root entity_ = cq.from(this.baseClass); 
Predicate restrictions = null;
...
restrictions = cb.conjunction();
restrictions = cb.and(restrictions, entity_.get("id").in(this.listId));
...
cq.where(restrictions);
...
Query qry = JpaHandle.get().createQuery(cq);

(Nota: JpaHandle es de implementación wicket-JPA)

¡Mi deseo es agregar la cláusula JOIN (lo más genérica posible)!

Tengo las anotaciones particulares en las clases (this.baseClass)

Por ejemplo :

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "assay_id", nullable = false)

Entonces, ¿hay alguna manera de hacer algo así en JPA estándar? (Nota: esto no compila)

Aquí se acerca una falla práctica:

...
Join<Experiment,Assay> experimentAssays = entity_.join( entity_.get("assay_id") );

O asi:

...
CriteriaQuery<Customer> q = cb.createQuery(Customer.class);
Root<Customer> c = q.from(Customer.class);
SetJoin<Customer, PurchaseOrder> o = c.join(Customer_.orders);

Para mí, si pudiera ser lo más genérico posible, sería genial ...:

...
Join joinClause = entity_join(entity_.get("assay_id"), entity2_.get("id"));

Por supuesto, tengo las anotaciones particulares en las clases (this.baseClass)

Gracias por tu tiempo. Apreciaré todo tipo de comentarios!

Respuestas a la pregunta(4)

Su respuesta a la pregunta