【问题标题】:Create list of objects from subselect in select with HQL使用 HQL 从选择中的子选择创建对象列表
【发布时间】:2011-07-22 19:02:56
【问题描述】:

是否可以使用非实体对象和来自 HQL 查询的 1:n 关系创建对象层次结构?

注意:使用命名空间完全限定时创建分析对象是没有问题的。唯一的问题是通过子选择关联到 SubAnalysis 对象。

类:

public class Analysis
{
  public List<SubAnalysis> relatedAnalysis;
  public Long someSum;

  public Analysis(Long someSum, List<SubAnalysis> relatedAnalysis)
  {
    this.someSum = someSum;
    this.relatedAnalysis= relatedAnalysis;
  }
}
public class SubAnalysis
{
  public String info;

  public SubAnalysis(String info)
  {
    this.info = info;
  }
}

HQL:

  select new Analysis(sum(t.value),
           (select new SubAnalysis(x.info)
              from SomeTable x
             where x.t = t))
    from Table t
   where t.id = :id
group by t

所以我基本上希望能够为实体生成对象报告:

表 => 一些表,一些表

喜欢:

分析 => 子分析,子分析

真正的查询涉及更多的求和和连接。

【问题讨论】:

    标签: java hibernate hql


    【解决方案1】:

    应该可以创建 Analysis 对象,尽管我不确定您是否必须使用 FQCN,因为 Hibernate 必须知道要使用的确切类。对于 SubAnalysis 对象和关联,我不确定,并且文档没有明确告诉我们(或者我只是盲目;))。

    【讨论】:

    • 啊,是的,创建分析对象有效。只有 SubAnalysis 关联和没有说明任何相关内容的文档才是问题所在。
    • 是的,获取 SubAnalysis 的列表没有问题,但是 hibernate 似乎无法为 Analysis 对象找到合适的 c'tor。但我不知道除了 List、SubAnalysis[] 或 Object[] 之外它还能等待什么。
    • 我不确定这是否可以通过 HQL 完成,但 Criteria API 提供了 Criteria.setResultTransformer 来创建分析实例。使用该加上嵌套的关联标准以及相应的结果转换器可能会有所帮助。
    • 我也遇到了类似的问题。请问可以提供样品吗?我的问题在这里:stackoverflow.com/questions/13768124/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    • 2014-02-11
    • 2011-02-14
    相关资源
    最近更新 更多