I am trying to construct queries dynamically, and my next target is add JOIN clauses (I don't know how can I use the API).
By now, for example, this code work for me :
...
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);
(Note : JpaHandle is from wicket-JPA implementation)
My desire is add JOIN clause (as generical as possible)!
I have the particular annotations in the classes (this.baseClass)
For example :
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "assay_id", nullable = false)
So,Is there a way to something like this in standard JPA ? (Note : this don't compile)
Here a practical fail aproaches :
...
Join<Experiment,Assay> experimentAssays = entity_.join( entity_.get("assay_id") );
Or like that :
...
CriteriaQuery<Customer> q = cb.createQuery(Customer.class);
Root<Customer> c = q.from(Customer.class);
SetJoin<Customer, PurchaseOrder> o = c.join(Customer_.orders);
For me, if it could be more generical as possible it will be great... :
...
Join joinClause = entity_join(entity_.get("assay_id"), entity2_.get("id"));
Of course, I have the particular annotations in the classes (this.baseClass)
Thank you for your time. I'll appreciate all kind of comments!
question from:
https://stackoverflow.com/questions/3424696/jpa-criteria-api-how-to-add-join-clause-as-general-sentence-as-possible 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…