Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JPQL中执行即时获取_Java_Jpa_Jpql - Fatal编程技术网

Java 如何在JPQL中执行即时获取

Java 如何在JPQL中执行即时获取,java,jpa,jpql,Java,Jpa,Jpql,我想知道在JPQL中(不是实体映射)如何显式地获取相关字段 我有ContactAddressLink(为了简洁起见取出了注释) class ContactAddressLink{ 接触; 地址; …一些额外的字段。。。 } 所以我有一个问题要问 select cal from Contact c, Address a, ContactAddressLink cal where cal.contact = c and cal.address = a 这给了我一个我期待的问题。但是,因为我会在看

我想知道在JPQL中(不是实体映射)如何显式地获取相关字段

我有
ContactAddressLink
(为了简洁起见取出了注释)

class ContactAddressLink{
接触;
地址;
…一些额外的字段。。。
}
所以我有一个问题要问

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
如果要匹配
联系人地址链接
,如果它有
联系人
/
地址
,请使用
内部连接获取


如果您想匹配
联系人地址链接
,即使它没有
联系人
/
地址
,请使用
左连接获取
记住,按照
JPA规范
所有
@OneToOne
@ManyToOne
都是急切获取的。您应该将其更改为lazy,否则,您将始终获取这些对象

我在想这是一个
FETCH JOIN
或类似的东西,假设我不想要联系人(只是地址),我在ca1之前拿出
FETCH
。联系人c?是的。如果您希望您的匹配条件完全不受
联系人的影响
,您甚至可以取出
内部连接获取校准。联系人c
。如果您只是不想急于获取
联系人
,但仍然希望匹配具有
联系人
联系人地址链接
,您可以只取出单词
获取
。刚刚尝试过,不幸的是,在我进行跟踪时,仍然为每个相关表提供单独的查询。我认为这可能只是实现的一个限制,而不是说明它应该已经获取的规范。很有趣。你用冬眠还是日食?将那些to-one字段中的
@ManyToOne
的fetchType设置为LAZY还没有?我通过Spring数据JPA使用Hibernate。没有“反向映射”,所以没有@ManyToOne,但我使用
@OneToOne
。Java实体中没有定义FetchType,不管怎样,根据规范,它应该可以工作,但看起来不是这样。我希望它能够快速地获取。然而,我希望JPA在一个SQL调用中获取它们。现在它进行了几个SQL调用。