在sql中左连接fetch

时间:2013-09-16 08:23:02

标签: sql jpa join fetch

我有两张表“A”和“B”。我想从这些表中读取数据。首先是JPA。如果我执行以下操作:

select a as a, b as b
from "A" a, "B" b
where ...;

我得到一个懒惰的初始化错误消息。

这就是我添加声明

的原因
left join fetch a."c" c

解决了这个问题。现在我需要在SQL语句中使用相同的内容。我可以用什么来进行左连接提取?

如果我尝试

select a as a, b as b
from "A" a, "B" b
left join fetch a."c" c
where ...;

我收到错误:找不到表“获取”。

2 个答案:

答案 0 :(得分:1)

为什么要在JPQL中使用引号? JPQL是基于实体的,而不是基于表的。尝试“选择a,b从A a,B b ......”。使用实体名称和实体中映射的属性来形成查询。

如果您收到延迟初始化错误,则表示您在未获取的实体之间存在关系。获取它们允许实体序列化,并且在反序列化时使用另一端的关系。但是fetch只是一个JPA概念 - 你为什么要在SQL中创建一个JPQL查询?

答案 1 :(得分:0)

您不能将FROM a, bLEFT JOIN混合使用。您可以使用带有FROM a,b子句的WHERE来加入实体/表,也可以将@ManyToOne@OneToMany添加为实体的属性,以便正确使用{{1如果a,b或c之间存在关系。要避免LazyInitialization,您必须从查询中获取实体的结果列表,然后在事务中调用要延迟加载的字段名称的getter,以便Hibernate知道延迟加载它。例如:LEFT JOIN否则您可以使用a.getC();