选择HQL查询多个新的()对象(select multiple new() object in hq

2019-11-01 06:23发布

我有一个关于HQL语言问题。 我试图通过生成语法HQL DTO的我的WCF REST的应用程序。 我有第二个查询的问题。 有什么不对呢? 是否有任何其他的方式来达到同样的结果呢?

这工作不错。

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>();

Answer 1:

那么, new Xxx(field1, field2, ...)语法是只是在查询中创建的DTO的一个方便途径。 它不是一个完全成熟的编程语言,因此它很可能不会支持嵌套new来电喜欢你的new EntityTypeDTO(..., new CustomFieldDTO(...))

你可以做的反而是选择字段为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], ...));
}


文章来源: select multiple new() object in hql query