【发布时间】:2013-03-04 20:36:30
【问题描述】:
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 会更容易。另一方面,我忍受着请求过滤集合休眠的痛苦。
标签: hibernate collections hql