JPA, EJB, FetchType.LAZY besoin de conseils.
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 :
Code:
1 2 3 4 5 6
| @Entity
class Element1 {
@OneToMany(fetch=FetchType.LAZY)
Collection<Element2> elements;
....
} |
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é).
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 :
Code:
1 2 3
|
Element1 get(Integer Id);
Element1 getWithCollectionOfElement2(Integer Id); |
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:
1 2 3 4 5 6
| class Element2 {
@ManyToOne
Element1 owner;
.....
} |
Et d'avoir deux méthodes :
Code:
1 2 3
|
Element1 get(Integer Id);
Collection<Element2> getElements(Element1 owner); |
Dans le deuxième cas, les méthodes ne sont pas ambigues.
Quelle est la meilleure façon de faire ce genre de chose ?
Merci.