2012-07-12 1 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エンティティで、2つ目は「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