Hibernate / JPA:是否可以在单个查询中检索异构实体?

我有2个实体:EntityA和EntityB。

它们是不相关的,我不能将它们放在inheritance树中,因为某些限制超出了本问题的范围。

但是我需要在同一个JPQL或HQL查询中获得包含两个实体的所有实例的混合List。 这可能是JPA甚至直接使用Hibernate吗?

我需要这样的东西:

FROM EntityA WHERE fieldA=1 UNION FROM EntityB WHERE fieldB="aa" 

任何提示?

好吧,我终于明白了。

它应该使实体实现一个通用接口(甚至不需要在Hibernate上声明这个接口)。

然后,可以完成这样的查询:

 FROM my.package.CommonInterface obj WHERE obj IN (FROM EntityA WHERE fieldA=1) OR obj IN (FROM EntityB WHERE fieldB='a') 

这样,您可以检索List

问题解决了。

最好的事情是执行两个查询。

但如果你必须:

您可以创建POJO来检索它们:

 class EntityAandEntityB { EntityA a; EntityB b; long idA; long idB; int fieldA; String fieldB; public EntityAandEntityB(long idA, long IdB, int fieldA, String fieldB) { this.a = new EntityA(idA, fieldA); this.b = new EntityB(idB, fieldB); } } 

然后你的查询将是:

 select new package.EntityAandEntityB(a.idA, a.fieldA, b.idB, b.fieldB) from ( (select idA, fieldA from EntityA) a UNION (select idB, fieldB from EntityB) b) 

这很脏,你可能必须仔细查看语法。

问候。