簡體   English   中英

如何在JPQL中執行EAGER提取

[英]How to perform an EAGER fetch in JPQL

我想知道在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

我記得看到過類似的東西,但我不記得確切的語法。

對。 你是對的。 語法為[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

如果要與具有Contact / Address ContactAddressLink匹配,請使用inner join fetch

如果即使沒有Contact / Address也要匹配ContactAddressLink ,請使用left join fetch

請記住,按照JPA Specification所有@OneToOne@ManyToOne被急切獲取。 如果沒有,則應將其更改為惰性,否則將始終獲取那些對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM