2012-12-07 35 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], ...)); 
}