Hibernate / JPA: возможно ли получить разнородные объекты в одном запросе? - PullRequest
3 голосов
/ 06 сентября 2011

У меня есть 2 объекта: EntityA и EntityB.

Они не связаны, и я не могу поместить их в дерево наследования для некоторых ограничений, выходящих за рамки этого вопроса.

Но мне нужно получить в одном запросе JPQL или HQL смешанный список, содержащий все экземпляры обеих сущностей. Возможно ли это с помощью JPA или даже Hibernate напрямую?

Мне нужно что-то вроде этого:

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

Любой намек?

Ответы [ 2 ]

5 голосов
/ 07 сентября 2011

Ну, я наконец-то понял это.

Нужно заставить сущности реализовывать общий интерфейс (даже не нужно объявлять этот интерфейс в Hibernate).

Затем можно выполнить такой запрос:

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

Таким образом, вы получаете List<CommonInterface>.

Проблема решена.

2 голосов
/ 06 сентября 2011

Лучше всего выполнить два запроса.

Но если вам необходимо:

Вы можете создать 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)

Это грязно, и вы, вероятно, должны внимательно посмотреть синтаксис.

С уважением.

...