Ich wechsle von einem anderen Entwicklungsstapel zu
Java/Spring und bin sehr verwirrt darüber, wie in
Spring einige Dinge erledigt werden. Und ich bin sehr überrascht, dass ich für mein spezielles Problem keine Lösung finden kann.
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?