Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用包含嵌套聚合函数的Hibernate HQL查询时遇到问题_Hibernate_Hql - Fatal编程技术网

使用包含嵌套聚合函数的Hibernate HQL查询时遇到问题

使用包含嵌套聚合函数的Hibernate HQL查询时遇到问题,hibernate,hql,Hibernate,Hql,以下hql_查询字符串按预期工作并传递数据记录。它给了我一个列表列表,其中嵌套的列表由一个人的pers和“persAccsBOs的数量”组成 现在,我想要达到和失败的是获得所有澳新银行的平均值。我尝试了以下查询字符串: query_string = "" + "select avg(anzBo) from " + " (select distinct pers, count(persAccsBOs) as anzBo from Person as pers" + " inner join per

以下hql_查询字符串按预期工作并传递数据记录。它给了我一个列表列表,其中嵌套的列表由一个人的pers和“persAccsBOs的数量”组成

现在,我想要达到和失败的是获得所有澳新银行的平均值。我尝试了以下查询字符串:

query_string = ""
+ "select avg(anzBo) from "
+ " (select distinct pers, count(persAccsBOs) as anzBo from Person as pers"
+ " inner join pers.personenAttribute as persAttr inner join persAttr.pa_pk.attribut as pAttr"
+ " inner join pers.accounts as persAccs"
+ " inner join persAccs.berechtigungsobjekte as persAccsBOs"
+ " where pAttr.name='UID_Department'"
+ " and persAttr.wert='Sales (10100200)'"
+ " group by pers)";
我收到错误消息:

意外标记:在第1行第25列附近选择[选择平均值(anzBo) 从选择不同的个人

我希望你知道我想做什么。你能帮我形成正确的hql_字符串吗

更新:

如果我尝试这样做:

query_string = ""
+ "select distinct pers, count(persAccsBOs) as anzBo, avg(anzBo) from Person as pers"
+ " inner join pers.personenAttribute as persAttr inner join persAttr.pa_pk.attribut as pAttr"
+ " inner join pers.accounts as persAccs"
+ " inner join persAccs.berechtigungsobjekte as persAccsBOs"
+ " where pAttr.name='UID_Department'"
+ " and persAttr.wert='Sales (10100200)'"
+ " group by pers";

我将得到一个java.lang.NullPointerException。

我不能建议一种在HQL中执行嵌套选择的方法,我也不能确定这是否是您的问题,尽管我怀疑可能是。但是,如果您想要java列表中出现的值的平均值,为什么不直接从第一个查询中生成的值计算它呢?可能是这样CPU稍微贵一点,但这会解决你的问题。看看我的更新。CPU成本不重要。我只是想让它运行。对不起,我想我没有抓住要点。如果我理解了你最初的断言,那么初始查询会给出一个值对列表。应该可以循环列表并计算average。如果我真的没有抓住要点,你可能需要展示更多的java代码,这样我才能理解为什么这样做不起作用。我现在要离开办公室,所以如果你愿意等那么长时间,我将无法再次回答。嗨,阿希姆,我描述的问题在hibernate://siehe中显然无法解决:////在hibernate中不可能实现这一点与我的预期非常接近。这就是为什么我建议使用宿主语言(我假设是Java)实现这一点。我检查了第一个链接,在这两种情况下,建议的解决方案都是手动计算平均值。在第二种情况下,Johanna的评论实际上表明这可能是fa这比把它打包成SQL或HQL查询要好得多。无论你尝试过什么,我都祝你好运。
query_string = ""
+ "select distinct pers, count(persAccsBOs) as anzBo, avg(anzBo) from Person as pers"
+ " inner join pers.personenAttribute as persAttr inner join persAttr.pa_pk.attribut as pAttr"
+ " inner join pers.accounts as persAccs"
+ " inner join persAccs.berechtigungsobjekte as persAccsBOs"
+ " where pAttr.name='UID_Department'"
+ " and persAttr.wert='Sales (10100200)'"
+ " group by pers";