You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
매입 이력이 조회되지 않은 핵심적인 원인은 매입 이력 추가 서비스 과정에서 특정 Portfolio 엔티티를 조회하고 조건을 검증하는 과정에서 �지연 로딩 상태인 연관 엔티티(포트폴리오 종목 리스트, 매입 이력 리스트)들을 로딩했기 때문입니다. 그리고 알림 서비스에서 연관 엔티티들을 이미 로딩한 Portfolio 엔티티가 새로 조회되지 않고 기존 영속성 컨텍스트에 있는 엔티티 객체를 가져와서 직전에 추가한 매입 이력이 조회되지 않았습니다.
매입 이력 추가 서비스 과정중 Portfolio 엔티티 조회 및 연관 엔티티를 로딩한 코드는 다음과 같습니다.
상황
매입 이력을 추가한후 알림 이벤트 서비스 수행중에 매입 이력 조회시 직전에 추가한 매입 이력이 조회되지 않는 문제가 발생합니다.
서비스 수행과정은 다음과 같습니다.
알림 서비스는
@EventListener
가 적용된 리스너 메서드가 다음과 같이 호출합니다.FineAnts-was/src/main/java/codesquad/fineants/spring/api/purchase_history/event/PurchaseHistoryEventListener.java
Lines 19 to 27 in 1722074
notificationService.notifyPortfolioTargetGainMessages 메서드 수행중 TargetGainPolicy 객체가 알림 전송 조건에 맞는지 수행중 Portfolio 객체의 reachedTargetGain() 메서드 수행중 purchaseHistory 리스트를 조회하면서 지연 로딩을 기대합니다.
FineAnts-was/src/main/java/codesquad/fineants/domain/portfolio/Portfolio.java
Lines 265 to 271 in 1722074
원인
매입 이력이 조회되지 않은 핵심적인 원인은 매입 이력 추가 서비스 과정에서 특정 Portfolio 엔티티를 조회하고 조건을 검증하는 과정에서 �지연 로딩 상태인 연관 엔티티(포트폴리오 종목 리스트, 매입 이력 리스트)들을 로딩했기 때문입니다. 그리고 알림 서비스에서 연관 엔티티들을 이미 로딩한 Portfolio 엔티티가 새로 조회되지 않고 기존 영속성 컨텍스트에 있는 엔티티 객체를 가져와서 직전에 추가한 매입 이력이 조회되지 않았습니다.
매입 이력 추가 서비스 과정중 Portfolio 엔티티 조회 및 연관 엔티티를 로딩한 코드는 다음과 같습니다.
FineAnts-was/src/main/java/codesquad/fineants/spring/api/purchase_history/service/PurchaseHistoryService.java
Lines 43 to 50 in 1722074
위와 같은 매입 이력 추가 서비스 과정중 지연 로딩인 상태의 연관 엔티티들을 이미 로딩하였기 때문에 알림 서비스에서 직전에 추가한 매입 이력이 조회되지 않은 것입니다. (알림 서비스는 매입 이력 추가 서비스와 같은 트랜잭션을 공유합니다.)
해결방법
위와 같은 문제를 해결하기 위해서 db에 저장한 새로운 매입이력 엔티티 데이터를 리스트에 추가하도록 하여 문제를 해결하였습니다.
FineAnts-was/src/main/java/codesquad/fineants/spring/api/purchase_history/service/PurchaseHistoryService.java
Lines 52 to 54 in 1722074
The text was updated successfully, but these errors were encountered: