Comment puis-je récupérer la clé étrangère à partir d'un APC ManyToOne cartographie sans frapper la table cible?

J'ai les deux annoté classes que j'utilise pour construire un graphique:

@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 */
}

Maintenant, quand je construire un graphe, j'émets deux requêtes pour extraire toutes les lignes de deux tables et de configurer l'enfant et le parent, références, pour lequel j'ai besoin de l'id stocké dans le Edge table.

Parce que je l'ai défini la relation entre les deux tables en JPA, accès au bord de l'objet pour obtenir les deux nœuds' id de l'objet de deux instructions SQL par edge, lorsque le fournisseur JPA paresseusement * les charges associées aux nœuds. Puisque j'ai déjà l'objet nœud, et les id ont déjà été chargés à partir du bord de la table, je veux ignorer ces questions, ils prennent un bien long temps pour les grandes graphiques.

J'ai essayé d'ajouter ces lignes à la Edge classe, mais alors mon fournisseur JPA veut me faire une cartographie en lecture seule, et je n'arrive pas à trouver une façon de le faire:

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

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

Je suis en utilisant Eclipselink et MySQL, si il le faut.


**Le comportement par défaut pour @ManyToOne est réellement impatient de chargement, voir La réponse de Pascal*

OriginalL'auteur Hanno Fietz | 2010-10-15