JPA присоединяется к объекту на том же объекте - PullRequest
1 голос
/ 21 октября 2011

У меня вопрос по JPQL.Мне нужно присоединиться к сущности на той же сущности.Entity.child_id отображается как коллекция в классе сущности JPA, т.е. у сущности есть свойство коллекции ("children"), которое содержит каждого потомка.Join отлично работает с этой коллекцией (кстати, не знаю почему), например:

SELECT parent.id, child FROM Entity parent JOIN parent.children child

Вопрос в том, есть ли способ написать этот запрос без JOIN, что-то вроде этого:

SELECT parent.id, child FROM Entity parent, Entity child WHERE <condition>

Я не знаю, как построить условие.«parent.children = child» не работает - левая сторона является коллекцией, а правая сторона - единым целым.Я предполагаю, что нужно использовать что-то вроде «child IN (parent.children)», но я не знаю, как именно это сделать.Мне это нужно, потому что я не могу объединить общее объединение с другими объединениями в более сложном запросе.Заранее спасибо!

1 Ответ

0 голосов
/ 24 октября 2011

Хорошо, я отвечу сам.

1-й способ:

SELECT parent.id, child FROM Entity parent, IN(parent.children) child

2-й способ:

SELECT parent.id, child FROM Entity parent, Entity child WHERE child MEMBER OF parent.children

Только 2-й запрос чрезвычайно опасен, этогенерирует очень тяжелый перекрестный SQL-запрос с IN.Если у кого-то есть лучшее решение - я бы очень признателен, если вы поделитесь, я еще не решил всю задачу.

...