XXX x = aaaService.getXXX(); bbbService.doSomething(x); bbbService.doSomething(XXX x) { x.getYYY(); <-- 여기서 LazyInitializationException }즉 XXX x 객체가 세션의 바운더리를 넘어서 이동할 경우 Detached 상태가 된다는 것이 문제의 원인일 것 같아.
그러므로 해결책은 1) detached된 객체를 re-attach하거나 2) 위 두 서비스의 호출을 하나의 Unit of Work로 묶어주거나.
2번이 애플리케이션 설계 측면에서 더 매력적일 듯.
인터넷에 있는 해결책들은 대부분 lazy=false 를 사용하라 되어 있던데 이것도 좀 그래. 왜냐하면 난 대부분의 경우 lazy=true 기능을 쓰고 싶단 말이지. 그리고 lazy=false로 하지 않아도 쿼리시에 eager fetch를 하면 되니까.
이상은 모두 추측. ㅎ (문서를 상세히 읽지 않았음)
댓글 없음:
댓글 쓰기