Warum im Ruhezustand zwei Abfragen durchführen, um eine bidirektionale @OneToOne-Zuordnung zu laden?
Ich habe Entität A, die eine B-Entität hat, und B hat eine A mit einer bidirektionalen @OneToOne-Zuordnung.
Now, wenn ich alle A-Datensätze finde, führen Sie im Ruhezustand zwei Abfragen mit einem linken Outer Join auf B aus, etwa so:
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=?
First Abfrage laden A und B Felder und es ist in Ordnung, aber warum zweite Abfrage durchführen, um A neu zu laden? Ich denke, diese Abfrage lädt den A-Inhalt in B, aber dieses A ist offensichtlich das A, das B enthält ... also ist es bereits mit der ersten Abfrage geladen, nicht wahr?
- EDIT -
Entity A:
@Entity
public class A implements Serializable{
// id and other ecc ecc
@OneToOne
@JoinColumn(name="id_b")
B b;
}
Entity B:
@Entity
public class B implements Serializable{
// id and other ecc ecc
@OneToOne(mappedBy="b")
A a;
}
Das ist die Situation, und ein findAll auf A braucht zwei Abfragen ... warum?