我有一个现有的域正在运行,并且无法根据关联集合中至少一个指定类型的实例来限制查询结果。
例如:
说一个人与Pet有一对多的关联。 Pet是抽象的,有几个子类,如Bird,Cat,Dog等,并使用table-per-class-hierarchy映射策略进行映射。
如何在hql中编写查询以返回至少有一个关联Dog的所有Person实例?
答案 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或其他什么。请注意,我编写了字段名称,因此您必须将它们替换为实际值。