Good day! I have some database and entities that I work with in a servlet.
here is a snippet of code from doGet, doPost . Immediately make a reservation that inside all my DAO objects look like this:
session = HibernateUtil.getSessionFactory().getCurrentSession(); Transaction tx = session.beginTransaction(); launches = session.createCriteria(LaunchesEntity.class).list(); tx.commit(); session = HibernateUtil.getSessionFactory().getCurrentSession(); Transaction tx = session.beginTransaction(); launches = session.createCriteria(LaunchesEntity.class).list(); tx.commit(); Well, now the code from doGet, doPost :
HibernateUtil.getSessionFactory().openSession(); //достаем из базы ВСЕ тесты Iterable<TestsEntity> alltest = Factory.getInstance().getTestsDAO().getAllTests(); for (TestsEntity testsEntity : alltest) { Transaction tx2 = HibernateUtil.getSessionFactory().getCurrentSession() .beginTransaction(); Iterable<ResultEntity> results = testsEntity.getResultsByTestId(); for (ResultEntity result : results) { //получаем Запуск с данным результатом LaunchesEntity launch = result.getLaunchesByLaunchId(); //получим все Параметры Запуска Iterable<ParamsAndValuesEntity> allParamsAndValues = launch .getParamsAndValuesesByLaunchId(); String paramsInString = null; for (ParamsAndValuesEntity paramAndValue : allParamsAndValues) { paramsInString+= " [" + paramAndValue.getParamsByParamsId().getParamName() + "= " + paramAndValue.getParamValue() + "] "; } Map row= new HashMap(); row.put("test_name", testsEntity.getName()); ......... //row.put("request_text", launch.getRequestText()); aaData.add(row); } tx2.commit(); } HibernateUtil.getSessionFactory().getCurrentSession().close(); Database diagram, I can, if desired, send. But I will say at once, there are different connections: one-to-many, many-to-many.
When Tomkata is slow, I get exception:
SEVERE: Servlet.service() for servlet [DataTableBackend] in context with path [/TestManager] threw exception org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: models.TestsEntity.resultsByTestId, could not initialize proxy - no Session at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:566) at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:186) at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:545) at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:124) at org.hibernate.collection.internal.PersistentBag.iterator(PersistentBag.java:266) at DataTableBackend.doGet(DataTableBackend.java:75) at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) PS prompt people good how to solve a problem, can prompt the working decision on data retrieval from a DB. Say at once that the data, as you can see, I submit complex queries to related tables