Hibernate/JPA: Is it possible to retrieve heterogeneous entities in a single query?

╄→гoц情女王★ 提交于 2019-11-29 08:03:14

Well, I finally figured it out.

It is enought to make the entities implement a common interface (it is not even needed to declare this interface on Hibernate).

Then, a query like this can be done:

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

This way, you retrieve a List<CommonInterface>.

Problem solved.

Best thing is to performs two queries.

But if you must:

You can create a POJO to retrieve them:

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);
    }
}

Then your query would be:

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)

This is dirty and you probably must to look carefully the syntax.

Regards.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!