我有2个实体:EntityA和EntityB。
它们是无关的,我不能将它们放在继承树中,以解决本问题范围之外的某些限制。
但是我需要在同一个JPQL或HQL查询中获得包含两个实体的所有实例的混合List。这可能是JPA甚至直接使用Hibernate吗?
我需要这样的事情:
FROM EntityA WHERE fieldA=1
UNION
FROM EntityB WHERE fieldB="aa"
任何提示?
答案 0 :(得分:5)
好吧,我终于明白了。
应该让实体实现一个通用接口(甚至不需要在Hibernate上声明这个接口)。
然后,可以完成这样的查询:
FROM my.package.CommonInterface obj
WHERE obj IN (FROM EntityA WHERE fieldA=1) OR
obj IN (FROM EntityB WHERE fieldB='a')
这样,您可以检索List<CommonInterface>
。
问题解决了。
答案 1 :(得分:2)
最好的事情是执行两个查询。
但如果你必须:
您可以创建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)
这很脏,你可能必须仔细查看语法。
问候。