2012-07-12 15 views
8

Estoy realmente confundido, ¿cómo funciona la asignación de resultados de columnas? ¿Qué estoy mapeando cuando uso columnas en lugar de entidades? Mira este ejemplo ...Columnas y entidades de SqlResultSetMapping

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")} 
     ) 

puedo entender lo que está tratando de hacer aquí, el resultado entidad será el conjunto de resultados que quiere, campos a tratar de asignar los campos a los nombres de alias, lo que la ¿Qué están haciendo los resultados de la columna? No parece que esté mapeando nada.

Respuesta

2

Asigna 4 campos del conjunto de resultados a 2 clases Java: la primera clase es Order entity y la segunda es (probablemente) String que debe contener el campo "item_name" db.

DB:       Java 
---       ---- 
order_id    ---> \ 
order_quantity  ---> Order entity 
order_item   --->/
item_name    ---> String 

Para poder leer los resultados de la consulta:

for (Object[] record : query.getResultList()) { 
    Order order = (Order)record[0]; 
    String itemName = (String)record[1]; 
} 
Cuestiones relacionadas