Zugriff auf den Wert einer Fremdschlüsselspalte, ohne einen zugehörigen Datensatz abzurufen
Posted: 16 Jan 2025, 10:31
Bedenken Sie die folgende Codestruktur:
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:
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?
Code: Select all
@Entity
class Parent {
}
@Entity
class Child {
private String name;
@ManyToOne
private Parent parent;
}
Code: Select all
// JSON Response example
{
"children": [
{
"name": "Child 1",
"parent_id": 1
},
{
"name": "Child 2",
"parent_id": 2
}
]
}
Code: Select all
child.getParent().getId()
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?