title: Hibernate: failed to lazily initialize a collection of role, no session or session was closed
body: <p>My code:</p>
  
  <pre><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&lt;Role&gt; roles = u.getRoleSet();
      logger.debug("Roles is null: " + (roles == null));
      roles.add(r);
      dao.save(u);
  }
  </code></pre>
  
  <blockquote>
    <p>13:39:41,041 ERROR:
    org.hibernate.LazyInitializationException
      failed to lazily initialize a
    collection of role:
    xxx.entity.core.User.roleSet, no
    session or session was closed
    org.hibernate.LazyInitializationException:
    failed to lazily initialize a
    collection of role:
    xxx.entity.core.User.roleSet, 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.PersistentSet.add(PersistentSet.java:212)
      at
    sg.com.junglemedia.test.dao.impl.hibernate.UserDaoTest.testAddRoleAndAddUser(UserDaoTest.java:40)
      at
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native
    Method)   at
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at
    java.lang.reflect.Method.invoke(Method.java:597)
      at
    org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
      at
    org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
      at
    org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
      at
    org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
      at
    org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
      at
    org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
      at
    org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
      at
    org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
      at
    org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
      at
    org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
      at
    org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
      at
    org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
      at
    org.junit.runners.ParentRunner.run(ParentRunner.java:236)
      at
    org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
      at
    org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
      at
    org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
      at
    org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
      at
    org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
      at
    org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)</p>
  </blockquote>
  
  <p>Anyone help?</p>