Hibernate: échec paresseusement initialiser une collection de rôle, pas de session ou la session a été fermée

Mon code:

    @Test
public void testAddRoleAndAddUser() {
Role r = roleDao.findByProperty("name", "admin");
if(r == null) {
r = new Role();
r.setName("admin");
r.setDescription("Just administrator.");
roleDao.save(r);
}
User u = dao.get(1l);
Set<Role> roles = u.getRoleSet();
logger.debug("Roles is null: " + (roles == null));
roles.add(r);
dao.save(u);
}

13:39:41,041 d'ERREUR:
org.mise en veille prolongée.LazyInitializationException
échoué paresseusement initialiser un
collection de rôle:
xxx.de l'entité.de base.De l'utilisateur.roleSet, pas de
session ou la session a été fermée
org.mise en veille prolongée.LazyInitializationException:
échoué paresseusement initialiser un
collection de rôle:
xxx.de l'entité.de base.De l'utilisateur.roleSet, pas de
session ou la session a été fermée à
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:380)
au
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionifnotconnected(AbstractPersistentCollection.java:372)
au
org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:365)
au
org.mise en veille prolongée.collection.PersistentSet.ajouter(PersistentSet.java:212)
au
sg.com.junglemedia.test.dao.impl.mise en veille prolongée.UserDaoTest.testAddRoleAndAddUser(UserDaoTest.java:40)
au
soleil.de réfléchir.NativeMethodAccessorImpl.invoke0(Native
La méthode) à
soleil.de réfléchir.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
au
soleil.de réfléchir.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
au
java.lang.de réfléchir.La méthode.invoke(la Méthode.java:597)
au
org.junit.les coureurs.de modèle.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
au
org.junit.interne.les coureurs.de modèle.ReflectiveCallable.exécuter(ReflectiveCallable.java:15)
au
org.junit.les coureurs.de modèle.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
au
org.junit.interne.les coureurs.des déclarations.InvokeMethod.évaluer(InvokeMethod.java:20)
au
org.junit.interne.les coureurs.des déclarations.RunBefores.évaluer(RunBefores.java:28)
au
org.junit.les coureurs.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
au
org.junit.les coureurs.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
au
org.junit.les coureurs.ParentRunner$3.exécuter(ParentRunner.java:193)
au
org.junit.les coureurs.ParentRunner$1.annexe(ParentRunner.java:52)
au
org.junit.les coureurs.ParentRunner.runChildren(ParentRunner.java:191)
au
org.junit.les coureurs.ParentRunner.l'accès$000(ParentRunner.java:42)
au
org.junit.les coureurs.ParentRunner$2.évaluer(ParentRunner.java:184)
au
org.junit.les coureurs.ParentRunner.exécuter(ParentRunner.java:236)
au
org.eclipse.jdt.interne.junit4.runner.JUnit4TestReference.exécuter(JUnit4TestReference.java:46)
au
org.eclipse.jdt.interne.junit.runner.TestExecution.exécuter(TestExecution.java:38)
au
org.eclipse.jdt.interne.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
au
org.eclipse.jdt.interne.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
au
org.eclipse.jdt.interne.junit.runner.RemoteTestRunner.exécuter(RemoteTestRunner.java:390)
au
org.eclipse.jdt.interne.junit.runner.RemoteTestRunner.principale(RemoteTestRunner.java:197)

Aider quelqu'un?

  • Ce n' save(u) faire? Comment gérez-vous le Session? Où voulez-vous ouvrir/fermer?
InformationsquelleAutor Ben | 2010-08-19