Tengo una consulta en JPA NativeSql, donde hago los «sindicatos» de tablas y combinaciones. Hice una entidad con todos los campos de consulta que son de varias tablas. Así que no puedo hacer «@Column» «@ table» como de costumbre con JPA.

¿Cómo puedo configurar los valores dados de la consulta a mi entidad?

InformationsquelleAutor Giovane | 2013-09-30

5 Comentarios

  1. 9

    Puede asignar las columnas devueltas por tu consulta SQL nativa a su entidad por el uso de @SqlResultSetMapping.

    Ejemplo:

    Query q = em.createNativeQuery(
        "SELECT o.id AS order_id, " +
            "o.quantity AS order_quantity, " +
            "o.item AS order_item, " +
            "i.name AS item_name, " +
        "FROM Order o, Item i " +
        "WHERE (order_quantity > 25) AND (order_item = i.id)",
        "OrderResults");
    
    @SqlResultSetMapping(name="OrderResults", 
        entities={ 
            @EntityResult(entityClass=com.acme.Order.class, fields={
                @FieldResult(name="id", column="order_id"),
                @FieldResult(name="quantity", column="order_quantity"), 
                @FieldResult(name="item", column="order_item")
            })
        },
        columns={
            @ColumnResult(name="item_name")}
    )

    Puede encontrar más ejemplos aquí.

  2. 0

    Mi humilde opinión, el uso de DAOs con JPA no es una buena idea. Pero echar un vistazo a la Criterios de API. Usted puede construir este tipo de consultas como la que usted describe con el CriteriaBuilder.

    • Yo estoy Usando la «UNIÓN»?
    • Huy…no la lea. ¿El uso de EclipseLink? EclipseLink sabe Sindicatos.
  3. 0

    JPA nativo SQL es la misma que la genérica SQL. Usted puede hacer union operación de la misma como SQL consulta hacer. Pero, si quieres hacerlo con JPQL, que usted necesita para utilizar EclipseLink, porque JPQL de JPA no el apoyo de la Unión de operación.

    • Exactamente, no apoyo, por lo que el uso nativo de la consulta, el problema radica en que el retorno de la consulta, ¿cómo puedo configurar para la entidad, ya que los campos de varias tablas a la vez?
  4. 0

    ¿Por qué no puso a los NATIVOS de SQL en una vista? A continuación, sólo tienes que crear una entidad asigna a la vista normal como cualquier entidad que se asignan a la tabla. La única diferencia es que no se puede insertar, actualizar o eliminar entidades con sede fuera de la vista.

    • Es lo cdu tratando de hacer, la entidad, tiene un ejemplo de ello?
    • Hacer la vista en la base de datos
    • Hice una entidad con la anotación «@ entidad» y las variables relacionadas con la consulta. Así lo hice, «Consulta = manager.createNativeQuery (sql.toString (), Cep.class);». Ahora la parte que falta de ajuste de par aminha entidad de valores de retorno. Me gustaría que fuera como esta: «la Lista de resultados = <Cep> de la consulta.getResultList ();»

Dejar respuesta

Please enter your comment!
Please enter your name here