@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
  1. 살려주세요 2021.06.30 16:22

    스케줄러를 사용하는 클래스와
    Entity를 사용하는 클래스를 나눠야 한다는게 정확히 어떤뜻인가요?...

    cronController에서
    스케줄러 어노테이션을 사용하는데
    해당 메서드에서 entity를 find해서 안에 join한거를 가져오려니 lazy에러 떠버리는데..
    이걸 분리를 어떤식으로 해야하는건가요?

  2. 살려주세요 2021.06.30 16:24

    @Scheduled가 걸려있는 메서드에서
    바로 find를 하지말고
    하나의 메서드를 통해 return을 받는 식으로 하면될까요?

+ Recent posts