Как выполнить выборку EAGER в JPQL - PullRequest
0 голосов
/ 07 июня 2019

Мне было интересно в JPQL (а не в сопоставлениях сущностей), как с нетерпением извлекать связанное поле с нетерпением.

У меня есть ContactAddressLink (для краткости вынул аннотации)

class ContactAddressLink {
  Contact contact;
  Address address;
  ... some extra fields ...
}

Итак, у меня есть запрос, который будет идти

select cal from Contact c, Address a, ContactAddressLink cal where
cal.contact = c and cal.address = a

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

Я хочу сделать что-то вроде

select cal eager fetch cal.a from Contact c, Address a, ContactAddressLink cal where
cal.contact = c and cal.address = a

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

Ответы [ 2 ]

2 голосов
/ 07 июня 2019

Да.Вы правы.Синтаксис [inner|left] join fetch.Пример:

select cal from ContactAddressLink cal
inner join fetch cal.contact c
inner join fetch cal.address a
where cal.id = 123456789

Если вы хотите сопоставить ContactAddressLink, если оно имеет Contact / Address, используйте inner join fetch.

Если вы хотите сопоставить ContactAddressLink дажеесли у него нет Contact / Address, используйте left join fetch.

0 голосов
/ 07 июня 2019

Помните, что согласно JPA Specification все @OneToOne и @ManyToOne получены с нетерпением.Вы должны изменить его на ленивый, если нет, вы всегда будете получать эти объекты.

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