我有实体A有一个B实体,而B有一个带有@OneToOne双向关联的A.
现在,当我找到所有A记录时,hibernate在B上执行左外连接的两个查询,如下所示:
select a.id, a.id_b, a.field1, b.id, b.field1 from A as a, B as b left outer join b ON b.id=a.id_b;
select a.id, a.id_b, a.field1, b.id, b.field1 from A as a, B as b left outer join b ON b.id=a.id_b WHERE b.id=?
Run Code Online (Sandbox Code Playgroud)
首先查询加载A和B字段,这没关系,但为什么要执行第二次查询来重新加载A?我认为这个查询加载了B中的A内容,但是这个A显然是包含B的A ......所以它已经加载了第一个查询,是不是真的?
- 编辑 -
实体A:
@Entity
public class A implements Serializable{
// id and other ecc ecc
@OneToOne
@JoinColumn(name="id_b")
B b;
}
Run Code Online (Sandbox Code Playgroud)
实体B:
@Entity
public class B implements Serializable{
// id and other ecc ecc
@OneToOne(mappedBy="b")
A …Run Code Online (Sandbox Code Playgroud)