Note that there are some explanatory texts on larger screens.

plurals
  1. POOptimized way to solve lazy initialization exception
    primarykey
    data
    text
    <p>I am working on a project with the combination of struts+spring+hibernate. Hibernate is a framework that i like most but i stuck to a problem Lazy Initialization Exception. I have to solve this but what i don't want to loose is</p> <ul> <li>I cant loose DTO from my project that helps to communicate between the layers.</li> <li>I don't want to access persistence object to service layer.</li> <li>I don't want to loos Utility class that translate the Persistence object to data transfer object.</li> </ul> <p>Here are the coding implementation that i have done. I am calling this method on the service layer</p> <pre><code>sectionsservice.getAllSections(); </code></pre> <p>The DAO Implementations are like this</p> <pre><code>public List&lt;SectionsTO&gt; getAllSections() { List&lt;SectionsTO&gt; sectionsto_list=new ArrayList&lt;SectionsTO&gt;(); List&lt;Sections&gt; sections_list=htemp.loadAll(Sections.class); try { SessionFactory factory=HibernateUtil.getSessionFactory(); Session session=factory.openSession(); Transaction tx=session.beginTransaction(); Query qry=session.createQuery("from Sections sections"); List list=qry.list(); Iterator it=list.iterator(); while(it.hasNext()) { Sections sections=(Sections)it.next(); SectionsTO sectionsto=**PropertyUtil**.getSectionsTOFromSections(sections); sectionsto_list.add(sectionsto); } tx.commit(); session.close(); factory.close(); } catch(Exception e) { e.printStackTrace(); } return sectionsto_list; } </code></pre> <p>here is the PropertyUtil class implementation</p> <pre><code>public static SectionsTO getSectionsTOFromSections(Sections sections) { SectionsTO sectionsto=new SectionsTO(); sectionsto.setSection_id(sections.getSection_id()); sectionsto.setSection_name(sections.getSection_name()); sectionsto.setSection_desc(sections.getSection_desc()); sectionsto.setThreads(sections.getThreads()); sectionsto.setPosts(sections.getPosts()); sectionsto.setLast_post(sections.getLast_post()); sectionsto.setLast_post_by(PropertyUtil.getMembersTOFromMembers(sections.getLast_post_by())); sectionsto.setQuestion_id(sections.getQuestion_id()); Set&lt;Questions&gt; questions_set=sections.getQuestions_set(); Set&lt;QuestionsTO&gt; questions_set_to=new HashSet&lt;QuestionsTO&gt;(); Iterator&lt;Questions&gt; it=questions_set.iterator(); while(it.hasNext()) { QuestionsTO questionsto=PropertyUtil.getQuestionsTOFromQuestions(it.next()); questions_set_to.add(questionsto); } return sectionsto; } </code></pre> <p>Here is the stacktrace of the error what i m getting</p> <pre><code> SEVERE: Servlet.service() for servlet [action] in context with path [/TechForum] threw exception [org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.cac.hibernate.Sections.questions_set, no session or session was closed] with root cause org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.cac.hibernate.Sections.questions_set, no session or session was closed at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358) at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350) at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:343) at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86) at org.hibernate.collection.PersistentSet.toString(PersistentSet.java:309) at java.lang.String.valueOf(Unknown Source) at java.io.PrintStream.println(Unknown Source) at org.apache.tomcat.util.log.SystemLogHandler.println(SystemLogHandler.java:269) at com.cac.dao.HibernateSectionsDAO.getAllSections(HibernateSectionsDAO.java:93) at com.cac.service.SectionsServiceImpl.getAllSections(SectionsServiceImpl.java:48) at com.cac.struts.RegisterAction.fetch_sections(RegisterAction.java:107) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:269) at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170) at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:113) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449) at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) </code></pre> <p>The persistance class(Section ) and transfer Objects(SectionsTO) are like this sections</p> <pre><code> private int section_id; private String section_name; private String section_desc; private int threads; private int posts; private String last_post; private Members last_post_by; private Date last_post_date; private int question_id; private Set&lt;Questions&gt; questions_set; //setter //getter </code></pre> <p>SectionsTO</p> <pre><code>private int section_id; private String section_name; private String section_desc; private int threads; private int posts; private String last_post; private MembersTO last_post_by; private Date last_post_date; private int question_id; private Set&lt;QuestionsTO&gt; questionsto_set; //setter //getter </code></pre> <p>The thing is that if i do lazy="true" on the collection i will get a lazy initialization exception while if i do lazy="false" it will eagerly load all the tables due to propertyutil class implementation. From last 48 hours i stuck to that. So please suggest me some optimized way to go.</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload