작성
·
207
0
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 와 트랜잭션 분리
감사합니다.