Zugriff auf den Wert einer Fremdschlüsselspalte, ohne einen zugehörigen Datensatz abzurufen

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Zugriff auf den Wert einer Fremdschlüsselspalte, ohne einen zugehörigen Datensatz abzurufen

by Guest » 16 Jan 2025, 10:31

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:

Code: Select all

child.getParent().getId()
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?

Top