我想知道在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
我记得看到过类似的东西,但是我不记得确切的语法。
答案 0 :(得分:2)
是的。你是对的。语法为[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
。
答案 1 :(得分:0)
请记住,JPA Specification
和@OneToOne
都被急切获取。如果没有,则应将其更改为惰性,否则将始终获取那些对象。