JPA + Postgresql: LazyInitializationException
Bonjour je travail sur un projet JEE et j'ai besoin de tester mon session bean depuis un projet clienEJB le probleme est que lorsque je fait un mise à jour ou une suppression tout se passe bien mais lors de l'ajout cette erreur est généré:
Code:
1 2 3 4 5 6 7 8
| Exception in thread "main" org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: persistence.Site.utilisateurs, no session or session was closed
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:380)
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:372)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:365)
at org.hibernate.collection.AbstractPersistentCollection.write(AbstractPersistentCollection.java:205)
at org.hibernate.collection.PersistentBag.add(PersistentBag.java:297)
at persistence.Site.ajouterUser(Site.java:57)
at test.Test.main(Test.java:70) |
voila mon fichier persistence.xml:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="BaseEcuEJB">
<jta-data-source>java:/BaseEcuDS</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.jdbc.batch_size" value="0"/>
</properties>
</persistence-unit>
</persistence> |
voila mon session bean:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| package services;
import java.util.List;
import javax.annotation.Resource;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import persistence.Site;
import persistence.Utilisateur;
/**
* Session Bean implementation class UsersManagerBean
*/
@Stateless
public class UsersManagerBean implements UsersManagerBeanRemote, UsersManagerBeanLocal {
@PersistenceContext(unitName="BaseEcuEJB")
private EntityManager em;
//@Resource
//SessionContext sc;
public boolean utilisateurExist(int id)
{
Utilisateur u = em.find(Utilisateur.class, id);
if (u == null)
{
return false;
}
else
return true;
}
public Site getSiteById(int id){
Site s = em.find(Site.class, id);
return s;
}
public List<Utilisateur> getUsersList()
{
Query q=em.createQuery("select u from Utilisateur u");
List users = q.getResultList();
return users;
}
public void maj(Site site){
em.merge(site);
}
public void ajout(Utilisateur u)
{
em.persist(u);
System.out.println("***************************User adde*****************************");
}
public void supp(Utilisateur u)
{
em.remove(em.merge(u));
}
} |
et en fin la classe main de test:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| package test;
import java.util.List;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.transaction.SystemException;
import org.hibernate.Session;
import persistence.Site;
import persistence.Utilisateur;
import services.UsersManagerBeanRemote;
public class Test {
public static String ad ="Admin";
public static void main(String[] args) throws Exception
{
Context jndiContext = new InitialContext();
Object ref = jndiContext.lookup("BaseEcuEAR/UsersManagerBean/remote");
UsersManagerBeanRemote umb = (UsersManagerBeanRemote)ref;
Utilisateur u1 = new Utilisateur();
u1.setNom("Bechir");
u1.setPrenom("Hada");
u1.setProfil("Admin");
u1.setPseudo("hadakamatcho");
Site site=umb.getSiteById(1);
site.ajouterUser(u1);
umb.maj(site);
//u1.setSite(null);
umb.ajout(u1);
//System.out.println(umb.findUser("Bechir").);
}
} |
J'ai pas compris cette erreur est du a quoi!!!