2012-07-12 2 views
8

정말 혼란 스럽습니다. 열 결과 매핑이 어떻게 작동합니까? 엔티티 대신 열을 사용하면 어떤 매핑이 이루어 집니까? ...이 예를 봐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")} 
     ) 
나는 그가 여기에서하려고하는 것을 이해할 수

는 엔터티 결과는 그가, 필드, 무엇을 시도하고 별칭 이름으로 필드를 매핑합니다 원하는 결과 집합이 될 것입니다 지옥 결과는 열 결과입니까? 그것은 아무것도 매핑하는 것처럼 보이지 않습니다.

답변

2

결과 세트의 4 개 필드를 2 개의 Java 클래스로 매핑합니다. 첫 번째 클래스는 Order 엔터티이고 두 번째 클래스는 "item_name"db 필드를 포함하는 (아마도) 문자열입니다.

for (Object[] record : query.getResultList()) { 
    Order order = (Order)record[0]; 
    String itemName = (String)record[1]; 
} 
: 쿼리 결과를 읽기 위해서는

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