probleme lazy loading - Java - Programmation
Marsh Posté le 21-11-2008 à 13:39:17
roronnoa a écrit : |
Je ne dirais pas mieux.
Soit la connexion au serveur bdd est fermé
Soit tu récupère ton objet, tu ferme ta session, tu rouvre une autre session, et tu essaye d'accéder a ton champ (et comme la session a changé, c'est plus possible)
Marsh Posté le 21-11-2008 à 13:55:49
Il faudrait que l'objet appellant soit lui même un EJB session, ou alors forcer la lecture des produits avant de retourner la categorie, ce qui n'est pas très joli et peut-être pénalisant en terme de perfs...
public Category findCategory(final Long categoryId) {
Category category;
category = em.find(Category.class, categoryId);
category.getProducts().size();
return category;
}
Marsh Posté le 17-11-2008 à 10:24:33
Bonjour,
Je travaille en ce moment sur un application java EE5, avec jsf, ejb3, jpa…
et je rencontre l’exeption suivante :
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.yaps.petstore.entity.catalog.Product.items, no session or session was closed
Voici mon code :
L’architecture est la suivante :
Jsf-->controller(managedBean)-->ejb stateless-->entityBean
Controller (CatalogController ):
public String doFindProducts() {
catalogBean=(CatalogLocal)new InitialContext().lookup("PetstoreEAR/CatalogBean/local" );
category = catalogBean.findCategory(getParamId("categoryId" ));
products =category.getProducts();
navigateTo = "products.displayed";
return navigateTo;
}
Ejb stateless:
public class CatalogBean implements CatalogRemote, CatalogLocal {
@PersistenceContext(unitName = "petstorePU" )
private EntityManager em;
public Category findCategory(final Long categoryId) {
Category category;
category = em.find(Category.class, categoryId);
return category;
}
entityBean
j’ai un entity bean product
et un entityBean category qui a comme attribut une liste de product.
Apres avoir cherché sur plusieurs forum j’ai cru comprendre que l’erreur peut venir du fait qu’au moment de faire products =category.getProducts();
Dans le controller, alors l’entity category n’est plus rattaché au context de persistance.
Mais je ne sait toujours pas comment resoudre le probleme…
Merci d’avance a tous ceux qui prendront le temps de lire et de repondre.