2012-12-07 36 views
0

我有一個關於hql語言的問題。我試圖在我的WCF REST應用程序上通過hql語法生成DTO。我對第二個查詢有問題。它有什麼問題?有沒有其他方法可以達到相同的結果?在hql查詢中選擇多個new()對象

這很好。

session.CreateQuery(@"select new EntityTypeDTO(t.ID, t.Title, assc.ID) 
          from crmEntityType t 
          left outer join t.Association as assc").List<EntityTypeDTO>(); 

這是行不通的。

session.CreateQuery(@"select new EntityTypeDTO(t.ID, t.Title, assc.ID, new CustomFieldDTO(f.ID,f.EntityType,f.FieldType,f.Name,f.Value)) 
          from crmEntityType t 
          join fetch t.Fields as f 
          left outer join t.Association as assc").List<EntityTypeDTO>(); 

回答

0

嗯,new Xxx(field1, field2, ...)語法只是在查詢中創建的DTO的一個方便途徑。它不是一個完全成熟的編程語言,因此它很可能不會支持像new EntityTypeDTO(..., new CustomFieldDTO(...))這樣的嵌套new調用。

你可以做的是,將字段選擇爲Object[]並自己調用構造函數,例如,像這樣:

List<Object[]> result = query.getResultList(); 

for(Object[] line : result) { 
    //this is just an example, the order depends on the field order in the select clause 
    //and you'd need some casts/conversion 
    new EntityTypeDTO(line[0], line[1], line[2], new CustomFieldDTO(line[3], ...)); 
}