kimchanjung / utterance-comments

github 댓글 저장소
1 stars 0 forks source link

[Spring] JPA EntityListeners에서 @Autowired를 통한 의존성 주입이 미동작하는 문제 해결 #15

Open utterances-bot opened 1 year ago

utterances-bot commented 1 year ago

[Spring] JPA EntityListeners에서 @Autowired를 통한 의존성 주입이 미동작하는 문제 해결

Java Back-End Developer KimChanJung's Blog

https://kimchanjung.github.io/programming/2020/06/28/spring-jpa-antity-listner-autowired-not-working/

namhokim commented 1 year ago

본문의 예제의 코드를 보면 ApplicationEventPublisher 의 publishEvent 로 RiderEntityEvent 를 발행하고 있습니다. POJO 객체를 발행하는 것처럼 보이지만 결국 PA Entity 인 Rider 를 포장한 객체입니다.

JPA가 관리하는 엔티티를 이벤트로 발행을 하는 경우 트랜잭션이 끝나고 이벤트 처리가 되는 경우 데이터 접근을 하려고 할 경우 에러가 발생할 수 있습니다. 가령 연관 관계가 걸려 있는데 lazy 로 페치 타입이 되어 있을 경우 이미 트랜잭션은 끊겨서 데이터를 가져올 수 없는데 가져오려고 하게 되는 형상이 벌어 질 수 있기 때문입니다.

따라서 이런 것을 방지하려면 JPA Entity 의 값을 일반 POJO 객체로 복사하여 이벤트 발행을 하는 것을 권장합니다.