✔ 문제
엔티티 구조
- A_entity(부모)
- ↳ B_entity (부모: A_entity, 자식: C_entity)
- ↳ C_entity (부모: B_entity, N:1 참조: D_entity)
- ↳ D_entity (부모: X)
- ↳ C_entity (부모: B_entity, N:1 참조: D_entity)
- ↳ B_entity (부모: A_entity, 자식: C_entity)
// C_entity
@JsonBackReference
@ManyToOne
@JoinColumn(name = "D_entity_id")
private D_entity d_entity;
JPA 를 사용하는 프로젝트에서 C_entity에서 D_entity 조회가 안되는 오류
✔ 해결과정
@JsonBackReference 어노테이션 제거
@JsonBackReference는 자식 엔티티에서 부모 엔티티의 정보를 숨겨서, JSON 직렬화 시 순환 참조 문제를 해결하는 데 도움을 준다.
✔ 원인
@JsonBackReference는 역참조를 무시하여 JSON 변환 시 해당 필드를 제외하게 한다.
이 설정은 부모-자식 관계에서 부모의 필드가 직렬화될 때 자식의 필드를 포함하지 않도록 한다.
내가 놓친 부분은 C_entity와 D_entity 가 부모-자식 관계가 아니라는 점
두 엔티티는 참조 관계일 뿐 부모 자식 관계는 아니라 해당 어노테이션이 필요없다.
하지만 @JsonManagedReference 사용해도 정상 동작하긴 했다.
@JsonManagedReference
- 부모 객체에서 자식 객체로의 참조를 설정한다.
- 직렬화 시 해당 객체가 JSON에 포함된다.
@JsonBackReference
- 자식 객체에서 부모 객체로의 참조를 설정한다.
- 직렬화 시 해당 객체는 무시된다.
내 경우, C_entity와 D_entity는 부모-자식 관계가 아니므로 @JsonBackReference 또는 @JsonManagedReference를 사용할 필요가 없다. 필요에 따라, 서로 참조 관계를 명확히 하기 위해 DTO를 사용하는 것도 고려할 수 있다.
'개발 > SpringBoot' 카테고리의 다른 글
[Spring Security] 스프링시큐리티 사용하는 이유, 사용하지 않았을 때 차이 비교 (1) | 2024.02.17 |
---|---|
[오류/해결] Could not resolve org.springframework.boot:spring-boot-gradle-plugin (0) | 2023.04.23 |
[h2 Database] 터미널로 h2 데이터 베이스 실행 하기 (0) | 2022.12.22 |
[spring] 스프링 빈과 의존관계, DI (0) | 2022.12.21 |
[springboot] test case @Aftereach 어노테이션 (0) | 2022.12.18 |