Hibernate Синтаксис для использования обоих выборки / выбора - PullRequest
1 голос
/ 23 ноября 2011

У меня возникли некоторые проблемы при смешивании и сопоставлении выборок и выборок с использованием режима гибернации.По сути, я перечисляю группу пользователей в пользовательской таблице, которая также содержит столбец «createBy», который ссылается на пользовательскую таблицу с идентификатором Ex:

id  | name | foo | createdBy
----------------------------
1     abc    zzz   2
2     def    zzz   2

Итак, в приведенном выше примере я хотел бы получить экземплярпользователя "def", который будет возвращен для столбца createBy "abc"

Итак, без createBy мой запрос выглядит следующим образом:

from User u inner join fetch e.foo as foo inner join fetch foo.bar as bar

Как мне вставить

"select User u2 from User where u2.id=u.createdBy" 

в предыдущий запрос?

1 Ответ

1 голос
/ 24 ноября 2011

Предполагая, что createdBy сопоставлено в сущности User как ленивый ManyToOne, вы включите его в свой запрос точно так же, как и другие объединения:

from User u
  join fetch u.foo as foo
  join fetch foo.bar as bar
  join fetch u.createdBy

Если оно не сопоставленокак ManyToOne (почему бы и нет?), и вместо этого сопоставляется только его идентификатор, вам придется использовать перекрестное объединение И , вам придется либо преобразовать результат запроса (через пользовательский конструктор или реализацию ResultTransformer).) или потреблять их как List<Object[]>, поскольку они будут такими:

select u, u2
  from User u, User u2
    join fetch u.foo as foo
    join fetch foo.bar as bar
 where u.createdBy = u2.id

Само собой разумеется, что первый вариант (отображение createdBy как ManyToOne) гораздо более прост.

...