관리 메뉴

행이네

원인모를 LazyInitializationException - no Session 본문

plming/Java-Spring Boot

원인모를 LazyInitializationException - no Session

행이™ 2020. 5. 25. 15:14

@Entity Class의 property에서

다른 @Entity Class를 참조하며

 

@ManyToOne(fetch = FetchType.LAZY) 를 주었다면

 

해당 property로 접근하려고 할 때는...?

뭐 다른 일이 일어날게 없다...  ㅡㅡ;;;

 

뭐 흔하게 계~~~속 잘~~~ 써 왔던 경우인데...

 

어느 날 갑자기, 뜬금없이, 아무리 생각해도 이해를 하지 못할...

아래처럼 LazyInitializationException 이 나왔다면...

 

org.hibernate.LazyInitializationException: could not initialize proxy [common.model.entity.P#2915] - no Session
        at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:155)
        at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:268)
        at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:73)

        at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:746)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
        at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:62)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
        at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)

        at sun.reflect.GeneratedMethodAccessor180.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84)
        at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

 

 

혹시... 해당 Class에서

@Scheduled 를 사용하고 있지 않은가?

 

 

그렇다면

@Scheduled 를 사용하는 Class와

Entity를 처리하는 Class를 분리해야 한다.

 

org.springframework.boot 2.0.8

spring-context 5.0.12

이 환경에서는 분리하니...

언제 그랬냐는 듯이...

잘 돌아간다...;;;

 

 

이런 경우는...

정말 만나고 싶지 않아...

 

 

'plming > Java-Spring Boot' 카테고리의 다른 글

원인모를 LazyInitializationException - no Session  (2) 2020.05.25
파일 Upload 크기 제한 설정  (0) 2019.06.16
2 Comments
  • 프로필사진 살려주세요 2021.06.30 16:22 스케줄러를 사용하는 클래스와
    Entity를 사용하는 클래스를 나눠야 한다는게 정확히 어떤뜻인가요?...

    cronController에서
    스케줄러 어노테이션을 사용하는데
    해당 메서드에서 entity를 find해서 안에 join한거를 가져오려니 lazy에러 떠버리는데..
    이걸 분리를 어떤식으로 해야하는건가요?
  • 프로필사진 살려주세요 2021.06.30 16:24 @Scheduled가 걸려있는 메서드에서
    바로 find를 하지말고
    하나의 메서드를 통해 return을 받는 식으로 하면될까요?
댓글쓰기 폼