Criterios de Generador de Crear un Objeto nuevo En la Instrucción Select

Me preguntaba si es posible crear tal consulta como :

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

también es posible hacerlo a través de la Especificación:

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


    return ???;
}

Gracias de antemano!

No sé la respuesta, en lo personal, pero lo que no darle una oportunidad?

OriginalEl autor user1827052 | 2012-11-15

1 Kommentar

  1. 26

    Sí, los Criterios API ha de tener que construir similar a JPQL constructor de expresiones. Resuls clase se establece a través de construir método en CriteriaBuilder.

    Su consulta JPQL expresado como un criterio de consulta es:

    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")));
    BUENO, Es exactamente lo que yo quería! Pero ahora tengo otra pregunta. Yo uso la Primavera de Datos y la Especificación para crear consultas. De ejemplo veo que tengo que llamar a q.seleccione , pero en la Especificación de la instrucción select es llamado automáticamente (bcs que acaba de volver el Predicado). ¿Tengo oportunidad de hacerlo usando la Especificación de la interfaz? o tengo que crear mi propio repositorio, llamada EntityManage y crear la consulta….
    Es posible especificar un valor Opcional en la construcción() método ? como con una combinación EXTERNA IZQUIERDA, me gustaría recuperar en seleccionar un campo, y también de crear el objeto, incluso si este campo es nulo.
    Tengo un DTO que se compone de algunos de los campos, y recientemente he añadido una Lista de<MyCustomObject> como un campo de este DTO. Los criterios del generador .construct() estaba trabajando bien, pero necesito la instrucción select para crear una Lista en el objeto personalizado. No he encontrado nada en la web sobre cómo hacer esto.. si alguien que pasa por saber la respuesta, voy a estar agradecido, thx

    OriginalEl autor Mikko Maunu

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein