Bonjour à tous,
J'ai besoin de conseils concernant l'initialization paresseuse (FetchType.LAZY) avec JPA.
Je me demande quelle est la meilleure façon de stocker en base un arbre d'objet assez conséquent.
Pour l'instant mes entités ressemblent à ça :
Le "fetch type" est égal à LAZY car la classe Element2 n'est pas toujours nécéssaire. De plus elle peut contenir beaucoup d'informations (Liste de liste de liste d'autre entité).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 @Entity class Element1 { @OneToMany(fetch=FetchType.LAZY) Collection<Element2> elements; .... }
Le problème est que si je veux récupérer un element de type Element2 depuis un Element1 dans une servlet, la session est terminée et j'obtiens une exception (LazynessException) [Normal].
Une première solution serait d'avoir deux méthodes :
Mais je trouve ça un peu bizarre ... C'est un peu ambiguë, et le programmeur peut se tromper de méthode. Je me demandais donc si il n'était pas mieux d'"inverser le mapping" et d'enlever l'attribut elements d'Element1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Element1 get(Integer Id); Element1 getWithCollectionOfElement2(Integer Id);
Et d'avoir deux méthodes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class Element2 { @ManyToOne Element1 owner; ..... }
Dans le deuxième cas, les méthodes ne sont pas ambigues.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Element1 get(Integer Id); Collection<Element2> getElements(Element1 owner);
Quelle est la meilleure façon de faire ce genre de chose ?
Merci.
Partager