인프런 커뮤니티 질문&답변
@EntityListeners로 오딧항목을 업데이트 하려는데 다른 테이블도 같이 업데이트 됩니다.
작성
·
242
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
안녕하세요. 오딧항목 처리부분 구현해 보다가 이상하게 동작하는 부분이 있어서 문의드립니다.
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
안녕하세요. 오딧항목 처리부분 구현해 보다가 이상하게 동작하는 부분이 있어서 문의드립니다.
Car - Body < Part
구조가 있을 때, 즉 Car 는Body 와 1:1,Body 와 Part 는 1:n 관계가 있습니다.
JPA에서는 모두 양방향 참조로 Car에서 Part 까지 접근 가능하고, 연관관계 주인은 Car -Body 에서는Body 가,Body < Part 에서는Part 가 가지도록 했습니다.
엔티티 저장을 편리하게 하기위해서 모든 OneToXXX 는 cascade 모드를 ALL 로 설정했습니다.
각 엔티티는 Audit 처리를 위해 Audit MappedSuperclass를 상속하고 이 클래스는 int 타입의 version 필드를 가지고 있습니다.
이 Audit 엔티티에 @EntityListeners 를 등록해서 Create, Update 시 버전을 올릴려고 AuditListener 을 구현하고 참조합니다.
오딧 테스트를 위해 @BeforeEach 애노테이션으로 데이터를 넣고 @Test 애노테이션으로 테스트를 수행했습니다.
Car 를 리포지토리에서 가져와서 Body 를 통해 Part 를 가져왔고 Part 의 이름을 업데이트 했습니다.
기대하는 값은 Part 테이블의 version 필드가 1 이 되는 것인데, Part 테이블은 정상적으로 1 로 업데이트 됐지만 Car 테이블의 버전도 1 로 바뀌었습니다.
왜 이렇게 동작하는지 궁금합니다. 자세한 사항은 너무 길에서 별도 페이지에 작성하였습니다. 양해 부탁드립니다.
JPA Test를 위한 @BeforeEach 와 트랜잭션 분리
감사합니다.





