在关联集合中查找至少具有指定类型的一个实例的实例

时间:2011-05-19 19:50:46

标签: java hibernate hql

我有一个现有的域正在运行,并且无法根据关联集合中至少一个指定类型的实例来限制查询结果。

例如:

说一个人与Pet有一对多的关联。 Pet是抽象的,有几个子类,如Bird,Cat,Dog等,并使用table-per-class-hierarchy映射策略进行映射。

如何在hql中编写查询以返回至少有一个关联Dog的所有Person实例?

1 个答案:

答案 0 :(得分:0)

由于宠物在“很多”方面,他们可能会指向各自的人员实体。这意味着你可以在Pets表中选择唯一的(Person),其中person不为null。由于您使用的是每个类层次结构,因此有一个discrimator列,因此您可以区分类型,即“.class”。

String hql = "select unique(p.person) from Pet p where p.class = ? and p.person is not null"

然后使用位置参数执行查询 - 即替换?与狗或CAT或其他什么。请注意,我编写了字段名称,因此您必须将它们替换为实际值。