2011-11-15 14 views
6

Tümü, Hazırda Bekletme: Bir Varlık Sql Sorgusu için Nasıl Bir Sütun Takma?

Herkes ben sütunlar için takma adlar kullanmak sqlquery sınıfını yönlendirebilir biliyor mu bir Sigara Yönetilen Varlık sorgusunun döndürdüğü?

SqlQuery Hazırda Bekletme sınıfını varlık olmayan POJO'lar listesi oluşturmak için kullanmaya çalışıyorum ancak SQL sorgusunda sütunları taklit etmeye çalışırken sorun yaşıyorum. Benim sql (örneğin SELECT o.id as orderId, ps.code as prescriptionStatus...) diğer takma koymaya çalıştığınızda, hazırda bekletme, "x" sütunu olmayan aliased sütun adı (örneğin "orderId" yerine "id"), sütun "x" bulamadığı şikayet ediyor. .

Döndürülmüş sütunlarımı takma islem yapmazsam, her şey iyi, ancak POJO'm taklit edilmis alan adlari olan özelliklere sahip olmaya zorlaniyor veya POJO içindeki eşlemeleri yönetmem gerekiyor. takma ad alanı olmayan alanlar).

İşte benim kod

//TODO: change builder to a name query --jg 

    StringBuilder sql = new StringBuilder(); 

    sql.append("SELECT o.id,\n"); 
    sql.append("  pet.name,\n"); 
    sql.append("  o.order_date,\n"); 
    sql.append("  rx_view.prescription_id,\n"); 
    sql.append("  rx_view.code\n"); 
    sql.append("FROM order_line_item oli\n"); 
    sql.append("  JOIN order_detail o\n"); 
    sql.append("   ON o.id = oli.order_id\n"); 
    sql.append("  JOIN order_line_item_pet olip\n"); 
    sql.append("   ON olip.order_line_item_id = oli.id\n"); 
    sql.append("  JOIN pet\n"); 
    sql.append("   ON pet.id = olip.pet_id\n"); 
    sql.append("  LEFT JOIN (SELECT olip.order_line_item_id order_line_item_id,\n"); 
    sql.append("       olip.prescription_id,\n"); 
    sql.append("       ps.code\n"); 
    sql.append("     FROM prescription_order_line_item olip\n"); 
    sql.append("       JOIN prescription p\n"); 
    sql.append("       ON olip.prescription_id = p.id\n"); 
    sql.append("       JOIN prescription_status ps\n"); 
    sql.append("       ON p.status_id = ps.id) rx_view\n"); 
    sql.append("   ON rx_view.order_line_item_id = oli.id\n"); 
    sql.append("WHERE oli.order_id IN (SELECT o.id\n"); 
    sql.append("      FROM order_detail o\n"); 
    sql.append("        JOIN order_line_item oli\n"); 
    sql.append("         ON o.id = oli.order_id\n"); 
    sql.append("        JOIN prescription_order_line_item poli\n"); 
    sql.append("         ON oli.id = poli.order_line_item_id\n"); 
    sql.append("        JOIN prescription rx\n"); 
    sql.append("         ON rx.id = poli.prescription_id\n"); 
    sql.append("      WHERE rx.id = :prescriptionId)\n"); 



    SQLQuery query = baseDao.getSession().createSQLQuery(sql.toString()); 

    query.setLong("prescriptionId", prescriptionId); 


    query.setResultTransformer(Transformers.aliasToBean(RelatedPrescriptionOrderLine.class)); 

    List results = query.list(); 

    return results; 

teşekkür ederiz!

cevap

9

Sen addScalar(String columnAlias, Type type) kullanabilirsiniz açıkça takma kendi ana SQL sütunları:

Örneğin

:

SQLQuery query = baseDao.getSession().createSQLQuery("SELECT o.id as orderId, ps.code as prescriptionStatus..."); 
query.setLong("prescriptionId", prescriptionId); 
query.addScalar("orderId",StandardBasicTypes.INTEGER) 
query.addScalar("prescriptionStatus",StandardBasicTypes.STRING) 
query.setResultTransformer(Transformers.aliasToBean(RelatedPrescriptionOrderLine.class)) 

List results = query.list(); 

return results; 

sonra setter ile RelatedPrescriptionOrderLine adında bir sınıf için bakacağız trafo denilen setPrescriptionId(), setPrescriptionStatus() vb ve sonucu bu ayarlayıcılar aracılığıyla örneğine yerleştirir.

+0

Mükemmel! Teşekkür ederim. Bunu adlandırılmış bir sorguya dönüştürürsem, skalerleri belirtebileceğinizi görüyorum. –

İlgili konular