본문 바로가기

스파르타코딩클럽(내일배움캠프)

스파르타코딩클럽 내일배움캠프 11주차 2일

728x90

[OnetoMany ManytoOne문제]

 

1. 처음에 Onetomany manytoOne 를 각각 memo와 Comments에 각각 넣었는데 안되서 comments의 manytoone으로 단방향 참조를 해서 해결했음 

 

2. 그래도 one to many manytoone을 해결해보자 해서 계속 문제를 해결해보려고했지만 순환참조 문제가 발생


[순환참조문제]

 

해결방법1

[Memo Entity]

    @JsonManagedReference
    @OneToMany(fetch =FetchType.LAZY,mappedBy = "memo",cascade = CascadeType.ALL)
//    @JoinColumn(name = "Comment_id", nullable = false)
    private List<Comments> comments = new ArrayList<>();

[Comments Entity]

@JsonBackReference
@ManyToOne(fetch =FetchType.LAZY)
@JoinColumn(name = "memo_id", nullable = false)
private Memo memo;

 

순환참조를 끊기 위해 주체를 Memo가 아니라 Comments로 바꿈

@JsonBackReference와 @JsonManagedReference를 쓰면 주체가 바뀜

 

해결방법2

Entity자체를 보내지않고 Dto에 필요한 변수만 넣어서 보내면 순환참조가 끊김

 

CommentsresponseDto에 @Getter를 꼭달아야된다 아니면, 406에러가남

Memo entity에

public void setComments(Comments comments)
{
    this.comments.add(comments);
}

setComments를 comments생성시점에 list에 넣어줌

Memo memo = memoRepository.findById(memoId).orElseThrow(()->new IllegalArgumentException("메모 ID가 존재하지 않습니다."));

Comments comments = new Comments(commentRequestDto,memo);
memo.setComments(comments);

*규칙

1. Onetomany에는joincolumn이 들어가면 안됨

2. mappedby는 onetomany만 들어감


 

728x90