2009-06-11 3 views
3

최대 절전 모드를 사용하여 새 레코드를 추가 할 때 다음 예외가 있습니다. 나는 또한 인덱스를 만들기 위해 Hibernate 검색을 사용하고있다.Hibernate 검색 문제 - 프록시를 초기화 할 수 없음 - no Session

이것은 제 예외입니다.

Jun 11, 2009 1:01:23 PM org.hibernate.LazyInitializationException <init> 
SEVERE: could not initialize proxy - no Session 
org.hibernate.LazyInitializationException: could not initialize proxy - no Session 
    at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:86) 
    at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:140) 
    at org.hibernate.search.engine.DocumentBuilderIndexedEntity.unproxy(DocumentBuilderIndexedEntity.java:505) 
    at org.hibernate.search.engine.DocumentBuilderIndexedEntity.buildDocumentFields(DocumentBuilderIndexedEntity.java:397) 
    at org.hibernate.search.engine.DocumentBuilderIndexedEntity.buildDocumentFields(DocumentBuilderIndexedEntity.java:456) 
    at org.hibernate.search.engine.DocumentBuilderIndexedEntity.buildDocumentFields(DocumentBuilderIndexedEntity.java:456) 
    at org.hibernate.search.engine.DocumentBuilderIndexedEntity.getDocument(DocumentBuilderIndexedEntity.java:386) 
    at org.hibernate.search.engine.DocumentBuilderIndexedEntity.createAddWork(DocumentBuilderIndexedEntity.java:334) 
    at org.hibernate.search.engine.DocumentBuilderIndexedEntity.addWorkToQueue(DocumentBuilderIndexedEntity.java:302) 
    at org.hibernate.search.backend.impl.BatchedQueueingProcessor.addWorkToBuilderQueue(BatchedQueueingProcessor.java:153) 
    at org.hibernate.search.backend.impl.BatchedQueueingProcessor.processWorkByLayer(BatchedQueueingProcessor.java:140) 
    at org.hibernate.search.backend.impl.BatchedQueueingProcessor.prepareWorks(BatchedQueueingProcessor.java:128) 
    at org.hibernate.search.backend.impl.PostTransactionWorkQueueSynchronization.beforeCompletion(PostTransactionWorkQueueSynchronization.java:40) 
    at org.hibernate.transaction.JDBCTransaction.notifyLocalSynchsBeforeTransactionCompletion(JDBCTransaction.java:274) 
    at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:140) 
    at com.tis.purchasedetails.dao.PurchaseDetailsDAO.savePurchaseDetails(PurchaseDetailsDAO.java:422) 
    at com.tis.purchasedetails.presentation.PurchaseItemsAction.execute(PurchaseItemsAction.java:56) 
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484) 
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274) 
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482) 
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) 
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) 
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) 
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) 
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) 
    at java.lang.Thread.run(Unknown Source) 
Jun 11, 2009 1:01:23 PM org.hibernate.transaction.JDBCTransaction notifyLocalSynchsBeforeTransactionCompletion 
SEVERE: exception calling user Synchronization 
org.hibernate.LazyInitializationException: could not initialize proxy - no Session 
    at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:86) 
    at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:140) 
    at org.hibernate.search.engine.DocumentBuilderIndexedEntity.unproxy(DocumentBuilderIndexedEntity.java:505) 
    at org.hibernate.search.engine.DocumentBuilderIndexedEntity.buildDocumentFields(DocumentBuilderIndexedEntity.java:397) 
    at org.hibernate.search.engine.DocumentBuilderIndexedEntity.buildDocumentFields(DocumentBuilderIndexedEntity.java:456) 
    at org.hibernate.search.engine.DocumentBuilderIndexedEntity.buildDocumentFields(DocumentBuilderIndexedEntity.java:456) 
    at org.hibernate.search.engine.DocumentBuilderIndexedEntity.getDocument(DocumentBuilderIndexedEntity.java:386) 
    at org.hibernate.search.engine.DocumentBuilderIndexedEntity.createAddWork(DocumentBuilderIndexedEntity.java:334) 
    at org.hibernate.search.engine.DocumentBuilderIndexedEntity.addWorkToQueue(DocumentBuilderIndexedEntity.java:302) 
    at org.hibernate.search.backend.impl.BatchedQueueingProcessor.addWorkToBuilderQueue(BatchedQueueingProcessor.java:153) 
    at org.hibernate.search.backend.impl.BatchedQueueingProcessor.processWorkByLayer(BatchedQueueingProcessor.java:140) 
    at org.hibernate.search.backend.impl.BatchedQueueingProcessor.prepareWorks(BatchedQueueingProcessor.java:128) 
    at org.hibernate.search.backend.impl.PostTransactionWorkQueueSynchronization.beforeCompletion(PostTransactionWorkQueueSynchronization.java:40) 
    at org.hibernate.transaction.JDBCTransaction.notifyLocalSynchsBeforeTransactionCompletion(JDBCTransaction.java:274) 
    at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:140) 
    at com.tis.purchasedetails.dao.PurchaseDetailsDAO.savePurchaseDetails(PurchaseDetailsDAO.java:422) 
    at com.tis.purchasedetails.presentation.PurchaseItemsAction.execute(PurchaseItemsAction.java:56) 
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484) 
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274) 
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482) 
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) 
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) 
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) 
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) 
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) 
    at java.lang.Thread.run(Unknown Source) 
Jun 11, 2009 1:01:23 PM org.hibernate.annotations.common.AssertionFailure <init> 
SEVERE: an assertion failure occured (this may indicate a bug in Hibernate) 
org.hibernate.annotations.common.AssertionFailure: Access a Sealed WorkQueue which has not been sealed 
    at org.hibernate.search.backend.WorkQueue.getSealedQueue(WorkQueue.java:47) 
    at org.hibernate.search.backend.impl.BatchedQueueingProcessor.performWorks(BatchedQueueingProcessor.java:170) 
    at org.hibernate.search.backend.impl.PostTransactionWorkQueueSynchronization.afterCompletion(PostTransactionWorkQueueSynchronization.java:46) 
    at org.hibernate.transaction.JDBCTransaction.notifyLocalSynchsAfterTransactionCompletion(JDBCTransaction.java:289) 
    at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:152) 
    at com.tis.purchasedetails.dao.PurchaseDetailsDAO.savePurchaseDetails(PurchaseDetailsDAO.java:422) 
    at com.tis.purchasedetails.presentation.PurchaseItemsAction.execute(PurchaseItemsAction.java:56) 
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484) 
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274) 
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482) 
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) 
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) 
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) 
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) 
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) 
    at java.lang.Thread.run(Unknown Source) 
Jun 11, 2009 1:01:23 PM org.hibernate.transaction.JDBCTransaction notifyLocalSynchsAfterTransactionCompletion 
SEVERE: exception calling user Synchronization 
org.hibernate.annotations.common.AssertionFailure: Access a Sealed WorkQueue which has not been sealed 
    at org.hibernate.search.backend.WorkQueue.getSealedQueue(WorkQueue.java:47) 
    at org.hibernate.search.backend.impl.BatchedQueueingProcessor.performWorks(BatchedQueueingProcessor.java:170) 
    at org.hibernate.search.backend.impl.PostTransactionWorkQueueSynchronization.afterCompletion(PostTransactionWorkQueueSynchronization.java:46) 
    at org.hibernate.transaction.JDBCTransaction.notifyLocalSynchsAfterTransactionCompletion(JDBCTransaction.java:289) 
    at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:152) 
    at com.tis.purchasedetails.dao.PurchaseDetailsDAO.savePurchaseDetails(PurchaseDetailsDAO.java:422) 
    at com.tis.purchasedetails.presentation.PurchaseItemsAction.execute(PurchaseItemsAction.java:56) 
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484) 
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274) 
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482) 
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) 
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) 
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) 
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) 
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) 
    at java.lang.Thread.run(Unknown Source) 
- INFO Save PurchaseDetailsVO Ends. 
- INFO Getting all PurchaseDetails List Using Hibernate Search Starts... 

답변

9

이 오류는 느리게로드되는 속성이나 컬렉션에 액세스하려고하지만 최대 절전 모드 세션이 종료되었음을 의미합니다. Hibernate에서의 Lazy 로딩은 코드에서 프라퍼티/콜렉션에 접근 할 때까지 객체가 데이터베이스 쿼리를 통해 채워지지 않는다는 것을 의미한다. Hibernate는 처음에 객체를 사용할 때만 데이터베이스에 접근 할 동적 프록시 객체를 생성함으로써이를 수행한다. 이 작업을하기 위해서는, 당신의 객체는 그것의 생명주기 전체에 열려있는 Hibernate 세션에 붙어 있어야한다. 세션 관리 방법을 확인하십시오. 세션이 다른 곳에서 닫혀있는 경우 새 세션에 개체를 다시 연결해야 할 수 있습니다.

+0

당신이 (반대 일이하지 않는?)에 http를 인용 할 때 당신이 당신의 소스를 연결 수를 : //shivasoft.in/blog/java/hibernate/cause-and-solution-of-org-hibernate-lazyinitializationexception-could-not-initialize-proxy-no-session-error/ –

+6

내 대답은 원본이며, 썼습니다. 2011 년 6 월 11 일에 게시 한 링크입니다. 2011 년 블로그이므로 블로그에 복사하여 붙여 넣었어야합니다. 내가 그의 블로그에서 그것을 복사했다면, 나는 완전한 설명에 대한 링크를 게시했을 것이다. –

+1

실례합니다. 나는 기사의 게시 날짜를 발견하지 못했습니다! –

5

http://www.grails.org/doc/latest/ref/Domain%20Classes/attach.html SAIS :

목적

는 현재 스레드에 결합 절전 세션으로 분리 된 도메인 예를 첨부 장착

데프 B= Book.get (1)
b.title = "어쩌구"
b.save (높이 : TRUE)
b.discard()

...
경우 (! b.isAttached()) {
b.attach()
}

설명

Grails는 관리 하이버 네이트를 사용 지속성 세션의 각 영구 객체. 요청 당 새 세션이 만들어지고 요청이 끝나면 닫힙니다. 객체가 세션에서 읽어지고 HttpSession과 같은 웹 범위에 배치되면 지속 세션이 닫혀 있기 때문에 분리 된 것으로 간주됩니다. attach() 메서드를 사용하여 기존 영구 인스턴스를 현재 요청의 지속성 세션에 다시 연결할 수 있습니다.

1

달리 할 말하지 않는 한 .... 3.0 이상이 느리게 컬렉션을로드 또한

최대 절전 모드가, 그것을 관리 할 최대 절전 모드, 달리 할 말하지 않는 한 귀하의 경우에 실행하는 동안 자신의 세션있어, 웹 앱 요청 ... 새로운 세션이 닫히고 열립니다. 따라서 부모를 검색하는 세션은 하위를 검색하도록 요청 된 세션과 같지 않을 수 있습니다.

요청에 OpenSessionInView 패턴을 적용하여 단일 세션을 유지 (재사용) 할 수 있습니다. 패턴을 적용하는 방법은 여러 가지가 있습니다 : 필터 (Spring의 OpenSessionInViewFilter), 인터셉터 (Spring의 OpenSessionInViewInterceptor), 웹 플로우 수신기 (Spring의 HibernateFlowExecutionListener)로 사용하거나, 전체를 시작하는 코드의 지점에서 직접 적용하십시오 음식물.

다른 접근 방법 : 게으른 로딩을 해제 , 적극적으로 객체 그래프로드 (!)들 Hibernate.initialize (컬렉션)

관련 문제