Bonjour,
J'ai un petit souci avec JPA (j'utilise jboss donc hibernate) sur une requête de "readAll".
Je dispose de deux entites une que l'on va appeler (pour l'exemple) "Bus" et une autre que l'on va appeler "Truc".
Il existe une relation un a un entre un "Bus" et un "Truc". Et un "Bus" peut ne pas avoir d'"Objet" et inversement.
J'ai donc fait le mapping comme suit (je me limite aux champs utiles):
Sur mon entite Truc(Qui gère la relation):
Sur mon entite Bus(qui ne gère pas la relation):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 @Id private int trucId; private String nom; @OneToOne @JoinColumn(name = "busID", referencedColumnName = "busID", nullable = true) private Bus bus;
on notera qu'avec un OneToOne, le chargement de la dépendance est faite en eager de base.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 @Id private int busID; @OneToOne(mappedBy="bus") private Truc truc;
Tout ca fonctionne très bien le problème est le suivant:
Je désire lire tous mes Bus et afficher la description du Truc (pour ceux qui en ont - left outer en sql classique).
Stupidement, j'ai créer deux requêtes nommées jpql comme suit:
Mais le problème c'est que lors de l'une de ces requêtes, les informations de l'objet lié ne sont pas chargées.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 "from Truc" et "from Bus"
Et donc quand je parcours ma liste de réponse, a chaque fois que je fais monBus.getTruc().getNom(), hibernate me refais une requête en base.
Pour faire simple, comment faire pour que les informations de mon objet soit chargées lors de la requête initiale...
J'espère que j'ai été suffisamment claire.
Merci d'avance
Pierre
ps: y'a 2000 bus et 2000 trucs dans ma base
Partager