HQL noob here,真的很苦恼这个。在HQL中选择集合
可以说我有以下三类:
public class A {
int id;
B b;
}
public class B {
int id;
Set<C> c;
}
public class C {
int id;
String type;
}
表B具有许多用C一对多的关系,由该表b_c定义。我需要一个查询,从表A中选择,按C.id分组,按C.type ='desiredType'进行过滤,然后返回C对象和A.id的计数。我一直喜欢的东西打转转:
SELECT c, COUNT(a.id) as count from A a JOIN a.b.c as c WHERE c.type = 'desiredType' GROUP BY c.id ORDER BY COUNT(a.id) desc
我与此查询的不同迭代玩耍了,但我不断收到各种异常或我的查询将返回什么。我似乎不理解的主要问题是如何返回匹配正确类型的集合的单个对象。
我希望这个问题听起来不愚蠢。我已经阅读了HQL手册和其他一百个SO问题,但我一定错过了一些东西。预先感谢任何指导。
不是你的问题的直接答案,但问题是你会更好地做更严格的oop,而不是在对象'C'上使用'type',你可以使用列类型的类来添加类的子类型你的数据库作为判别式。那么请求只有正确类型的C才会更容易。 另一方面,我承担了请求过滤集合进入休眠状态的痛苦。 – benzonico 2013-03-04 23:33:56