JPA @Query Left присоединиться к той же сущности - PullRequest
0 голосов
/ 04 июня 2018

У меня возникла проблема с выполнением запроса с использованием левых соединений

У меня есть пользовательская сущность, подобная этой:

public class Form{
  UserEntity currentUser;
  UserEntity prevUser;
  long id;
  //getters and setters
}

Теперь мой @Query выглядит следующим образом.

@Query(SELECT NEW com.package.forms.Form(room.cUser,room.pUser,room.id) FROM Room room
 LEFT JOIN room.cUser cuser LEFT JOIN room.pUser puser WHERE room.id = :id)

И запрос в логах конвертируется примерно так:

select room0_.c_user,room0_.p_user,room0.id FROM room room0_ left outer join user user1_ on room0_.c_user = user1_.id
inner join user user2_ inner join on room0_.p_user = user2_.id

Этот запрос не дает мне результатов.Однако, когда я вставляю преобразованный запрос в журналы на сервер SQL и меняю внутреннее соединение на левое, я получаю результаты.Как сделать так, чтобы обе сущности использовали левое соединение?

Я не могу использовать собственный запрос, потому что здесь я использую select new для своего пользовательского класса.

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

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

    @Query(SELECT NEW com.package.forms.Form(room.group,room.cUser,room.pUser,room.id) FROM Room room 
LEFT JOIN room.group group LEFT JOIN room.cUser cuser LEFT JOIN room.pUser puser WHERE room.id = :id)

Затем изменился на это.

    @Query(SELECT NEW com.package.forms.Form(room.group,room.cUser,room.pUser,room.id) FROM Room room 
     LEFT JOIN room.cUser cuser LEFT JOIN room.pUser puser 
LEFT JOIN room.group groupWHERE room.id = :id)
0 голосов
/ 04 июня 2018

Как насчет

SELECT NEW com.package.forms.Form(cuser, puser, room.id)

вместо

SELECT NEW com.package.forms.Form(room.cUser,room.pUser,room.id)

Я думаю, что вы должны использовать alias объединенной сущности, если вы делаете это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...