2012-07-12 37 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")} 
     ) 

मैं समझ सकता कि वह क्या यहाँ करने के लिए कोशिश कर रहा है, इकाई परिणाम परिणाम सेट वह चाहता है, खेतों कोशिश करते हैं और aliased नाम करने के लिए क्षेत्रों के नक्शे होगा, क्या होगा नरक कॉलम परिणाम कर रहा है? ऐसा लगता है कि यह किसी भी चीज़ पर मैपिंग नहीं कर रहा है।

उत्तर

2

आप परिणाम सेट से 4 फ़ील्ड को 2 जावा कक्षाओं में मैप करते हैं: प्रथम श्रेणी ऑर्डर इकाई है, और दूसरा (संभवतः) स्ट्रिंग जिसमें "item_name" डीबी फ़ील्ड होगा।

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

आदेश क्वेरी परिणाम पढ़ने के लिए:

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