Hibernate CustomEventListener 사용해 saveAll로 수정된 데이터 변경이력 적재 방법

조회수 58회

Hibernate CustomEventListener 를 사용해 데이터 변경 이력 기능을 구현하고 있습니다. PostUpdateEventListener를 통해 JPA의 save나 saveAll을 통해 값을 수정하는 경우를 감지합니다.

현재 PostUpdateEventListener를 상속받아 클래스를 만들고 onPostUpdate() 메소드 안에서 변경값을 비교하 변경이력을 RDB에 저장하는 방식으로 변경이력 로그를 적재하고 있습니다.

@Slf4j
@Component
public class CustomPostUpdateEventListener implements PostUpdateEventListener {
  @Override
  public void onPostUpdate(PostUpdateEvent event) {
     if (!Objects.equals(beforeValue, afterValue)) {
        entityManager.persist(ChangeData.builder()
         .before(beforeVal)
         .after(afterVal)
         .build());     
     }
  }
}

JPA의 save 메소드를 사용한 값들은 잘 적재되는데 saveAll 메소드를 사용한 경우 changeData 테이블에 데이터가 적재되지 않고 있습니다. 쿼리를 로그로 찍어보면 save를 사용해 들어온 경우 changeData 테이블에 적재하는 insert가 잘 되는데, saveAll를 사용한 경우 changeData 테이블에 적재하는 insert 쿼리가 실행되지 않는 것을 확인했습니다.

변경이력을 저장할 때 commit이 되지 않아 발생하는 문제인가 하여 변경이력 관련 서비스를 만들고 저장하는 save 메소드에 @Transaction을 달아보았지만 오류 상황이 해결되지 않았습니다.

어떻게 해야 saveAll로 수정된 데이터의 변경이력이 changeData 테이블에 잘 적재될 수 있을까요?

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)