6
有誰知道我可以直接SqlQuery類類中使用別名列返回上非管理實體查詢?
我試圖使用SqlQuery Hibernate類來創建非實體POJO的列表,但遇到了嘗試在SQL查詢中對列進行別名的麻煩。當我嘗試在我的sql中加入別名時(例如SELECT o.id as orderId, ps.code as prescriptionStatus...
),hibernate抱怨它找不到列「x」,其中列「x」是非別名列名稱(例如「id」而不是「orderId」) 。
如果我沒有別名我的返回列,一切都很好,但是我的POJO然後被迫使用非別名字段名稱的屬性,或者我必須管理POJO中的映射(返回的名字很好的getter沒有別名的字段名稱)。
這裏是我的代碼
//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;
謝謝!
非常好!謝謝。我看到你可以指定標量,如果我將它轉換爲命名查詢。 –