2012-11-15 2 views
11

Mi chiedevo se è possibile creare tale interrogazione come:Criteri Builder Crea nuovo oggetto nella Select

em.createQuery(
     "SELECT NEW EmpMenu(p.name, p.department.name) " 
      + "FROM Project p ").getResultList(); 

anche è possibile farlo via Specification:

public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, 
     CriteriaBuilder cb) { 


    return ???; 
} 

Grazie in anticipo !

+0

Io non conosco la risposta, personalmente, ma lo dare un colpo? –

risposta

19

Sì, l'API dei criteri ha un costrutto simile alle espressioni di costruzione JPQL. La classe Resuls viene impostata tramite il metodo construct in CriteriaBuilder.

Vostri criteri JPQL espresso come una query di criteri è:

CriteriaBuilder cb... 
CriteriaQuery<EmpMenu> q = cb.createQuery(EmpMenu.class); 
    Root<Project> c = q.from(Project.class); 
    q.select(cb.construct(EmpMenu.class, 
     c.get("name"), c.get("department").get("name"))); 
+3

BUONO, è esattamente quello che volevo! Ma ora ho un'altra domanda. Uso Spring Data e Specification per creare query. Dall'esempio vedo che devo chiamare ** q.select **, ma in Specifica l'istruzione select viene chiamata automaticamente (bcs si restituisce solo il predicato). Ho la possibilità di farlo utilizzando l'interfaccia di specifica? o devo creare il mio repository, chiamare EntityManage e creare la query .... – user1827052