Wie kann ich den Fremdschlüssel aus einer JPA ManyToOne-Zuordnung abrufen, ohne die Zieltabelle zu treffen?

Ich verwende die folgenden zwei mit Annotationen versehenen Klassen, um ein Diagramm zu erstellen:

@Entity
@Table(name = "Edge")
public class Edge
{
    /* some code omitted for brevity */

    @ManyToOne
    @JoinColumn(name = "ixNodeFrom", nullable = false)
    private Node         _nodFrom;

    @ManyToOne
    @JoinColumn(name = "ixNodeTo", nullable = false)
    private Node         _nodTo;

    /* some code omitted for brevity */
}

@Entity
@Table(name = "Node")
public class Node
{
    /* some code omitted for brevity */

    @OneToMany(mappedBy = "_nodTo")
    private Set<Edge>    _rgInbound;

    @OneToMany(mappedBy = "_nodFrom")
    private Set<Edge>    _rgOutbound;

    /* some code omitted for brevity */
}

Now, wenn ich das Diagramm erstelle, gebe ich zwei Abfragen aus, um alle Zeilen aus jeder Tabelle abzurufen und die untergeordneten / übergeordneten Referenzen einzurichten, für die ich die im @ gespeicherten IDs benötigEdge Tabelle

Weil ich die Beziehung zwischen den beiden Tabellen in JPA definiert habe, löst der Zugriff auf das Kantenobjekt, um die IDs der beiden Knoten zu erhalten, zwei SQL-Anweisungen pro Kante aus, wenn der JPA-Anbieterträg * lädt die zugehörigen Knoten. Da ich die Knotenobjekte bereits habe und die IDs bereits aus der Kantentabelle geladen wurden, möchte ich diese Abfragen überspringen, da sie für größere Diagramme sehr lange dauern.

Ich habe versucht, diese Zeilen zum @ hinzuzufügeEdge class, aber dann möchte mein JPA-Provider, dass ich eine Zuordnung schreibgeschützt mache, und ich kann anscheinend keinen Weg finden, wie das geht:

@Column(name = "ixNodeTo")
private long _ixNodeTo;

@Column(name = "ixNodeFrom")
private long _ixNodeFrom;

Ich verwende Eclipselink und MySQL, wenn es darauf ankommt.

** Das Standardverhalten für@ManyToOne ist eigentlich eifrig geladen, siehe Pascals Antwort*

Antworten auf die Frage(10)

Ihre Antwort auf die Frage