Как неявно объединить коллекции в Hibernate? - PullRequest
1 голос
/ 04 октября 2010

Структура объекта похожа на ниже-

Entity A
  - Collection <B>

Entity B
  - Collection <C>

Entity C
  -Collection <D>

Entity D
  CompositePrimaryKey

Class CompositePrimaryKey
  String id;

В HQL запрос похож на из A a, где a.B.C.D.CompositePrimaryKey.id = 'input';

Я получаю следующее исключение-

org.hibernate.QueryException: незаконная попытка разыменования коллекции

По сути, это неявное объединение коллекций. Каков правильный подход к этому?

Я хочу получить все данные через коллекции - на основе значения идентификатора

Спасибо.

Ответы [ 2 ]

1 голос
/ 05 октября 2010

Я получаю (...) исключение org.hibernate.QueryException: незаконная попытка разыменования коллекции

Выражение пути a.B.C.D недопустимо, поскольку B (и C и D) является коллекцией.

По сути, это неявное объединение коллекций. Каков правильный подход к этому?

Использовать явное объединение:

from A a join a.B b join b.C c join c.D d where d.pk.id = :id
1 голос
/ 04 октября 2010

Насколько мне известно, HQL не может разыменовать этот сложный случай. Необходимо указать сопоставление для дочерних коллекций как fetch="join" и написать большое HQL-соединение вручную:

from A_table a, B_table b, C_table c, D_table d
  where a.b_id = b.id and b.c_id = c.id and c.d_id = d.id and d.id = 'input'

Хорошим решением также будет определение фильтра для сущности A (фильтры работают со столбцами таблицы):

<class name="A" ...>
    ...
    <filter name="id_filter" condition="D_table.id = :id" />
</class>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...