Search code examples
hibernatejpatransactionskaraf

Exception while trying to lazy loading entities with Karaf container


I'm trying to load data from database using lazy loading method but an exception occurs, I'm using Karaf 3.0.0, Hibernate 4.2.2.Final and JPA 2. I tried also to open a transaction before making the request but the problem persists:

EntityManager em = HibernateUtil.getEntityManager();
em.getTransaction().begin();
List<Position> list = taxiEntity.getPositionsList();
em.getTransaction().commit();
em.close();

The exception is:

Exception in thread "AWT-EventQueue-0" org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: fr.pu.e
ntities.Toolbar.mainWindowList, could not initialize proxy - no Session
        at org.hibernate.collection.internal.AbstractPersistentCollection.throwL
azyInitializationException(AbstractPersistentCollection.java:566)
        at org.hibernate.collection.internal.AbstractPersistentCollection.withTe
mporarySessionIfNeeded(AbstractPersistentCollection.java:186)
        at org.hibernate.collection.internal.AbstractPersistentCollection.initia
lize(AbstractPersistentCollection.java:545)
        at org.hibernate.collection.internal.AbstractPersistentCollection.read(A
bstractPersistentCollection.java:124)
        at org.hibernate.collection.internal.PersistentBag.iterator(PersistentBa
g.java:266)
        at fr.actiasodielec.dsw802.toolbar.instantiator.MainToolbar.<init>(MainT
oolbar.java:54)
        at fr.actiasodielec.dsw802.mainwindow.MainWindowGui.initGUI(MainWindowGu
i.java:78)
        at fr.actiasodielec.dsw802.mainwindow.InitializationSW.process(Initializ
ationSW.java:112)

Solution

  • This is because you fetch lazy collection outside of transaction (session). You have 2 ways:

    1. Eagerly fetch required collection (link)
    2. Set hibernate property (for SessionFactory):

      <prop key="hibernate.enable_lazy_load_no_trans">true</prop>