스프링으로 실전 프로젝트를 개발하던 중 해당 오류가 나왔다. 해당 오류는 JAVA에 Json 타입 변환 과정 중 일어난 오류이다. 이는 테이블과 테이블이 연관 관계에 있으며 이를 mode.addAttribute 메소드를 통해 데이터를 Front로 보낼때 Json으로 변환 과정중에 무한으로 참조가 순환되어 일어나는 오류로 간단히 해결할 수 있다.
문제
@Entity
@Getter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Theme {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
// @Column(name = "theme_id")
public Long id;
@JsonIgnore
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "company_id")
private Company company;
}
@Builder
@Entity
@NoArgsConstructor
@Getter
@AllArgsConstructor
public class Company {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
// @Column(name = "company_id")
private Long id;
@Column
private String workHour;
@OneToMany(mappedBy = "company", fetch = EAGER)
private List<Theme> themeList = new ArrayList<>();
}
아마 JPA 순환 반복이 Theme에서 일어난 듯 하다. Theme에는 하위 연관 관계가 당연히 추가로 있으며 이 때문에 참조에 참조를 반복하다가 JSON이 오류가 난 듯 싶다. Spring은 Front로 데이터를 보낼 때 Json으로 보내야하는 상황이면 Jackson을 통해 Json 형태로 변환하는데 순환구조일 경우 에러가 떠버린다.
위의 코드처럼 해당 연관관계 매핑 부분에 @JsonIgnore을 붙여주면 순환 참조 관계를 막을 수 있다
'trouble shooting > spring' 카테고리의 다른 글
실전 프로젝트 service 로직 개선 사항 (0) | 2022.12.02 |
---|---|
@Transactional(readOnly = true) (1) | 2022.12.02 |
JPA Diarect(방언) 지정 (0) | 2022.11.30 |
실전 프로젝트 피드백 N+1 문제 (0) | 2022.11.29 |
Unsupported Media Type, status 415 (0) | 2022.11.14 |
댓글