Bedenken Sie die folgende Codestruktur:
Code: Select all
@Entity
class Parent {
}
@Entity
class Child {
private String name;
@ManyToOne
private Parent parent;
}
In meinem API-Controller möchte ich mit einer untergeordneten-Liste antworten. Jedes untergeordnete-Element sollte einige untergeordnete-Felder (z. B. Name) und eine übergeordnete-ID (und keine anderen übergeordneten-Daten) enthalten:
Code: Select all
// JSON Response example
{
"children": [
{
"name": "Child 1",
"parent_id": 1
},
{
"name": "Child 2",
"parent_id": 2
}
]
}
Um den parent_id-Wert bereitzustellen, lässt mich
Spring+Hibernate+JPA folgendermaßen auf die Parent-ID zugreifen:
Das führt nicht nur dazu, dass der gesamte Elterndatensatz mit allen seinen Feldern unnötig aus der Datenbank abgerufen wird, sondern verursacht bei mir auch ein
N + 1-Problem Dies ist der Fall, wenn keine JOIN FETCH- oder EAGER LOAD-Ansätze verwendet werden.
Aber parent_id ist eine einfache Child-Spalte.
Sie sollte verfügbar sein für kostenlos, auch wenn die Assoziation nicht geladen wurde!
Gibt es einen optimalen Weg, mein Ziel zu erreichen?