... //생략
@JsonIgnore
@ManyToOne(fetch = LAZY)
@JoinColumn(name="place_id", nullable = false)
private Place place;
@JsonIgnore
@ManyToOne(fetch = LAZY)
@JoinColumn(name="user_id", nullable = false)
private Users users;
... //생략
//연관관계 설정
public void placeComment(Place place){
this.place = place;
place.getComments().add(this);
}
public void UserComment(Users users){
this.users = users;
users.getComments().add(this);
}
... // 생략
@OneToMany(mappedBy = "place")
private List<Comment> comments = new ArrayList<>();
... // 생략
... // 생략
@OneToMany(mappedBy = "users", fetch = LAZY)
private List<Comment> comments = new ArrayList<>();
... // 생략
CommentService.java
// comment 생성
@Transactional
public Long save(CommentCreateRequestDto commentCreateRequestDto, String email){
Comment comment = Comment.builder()
.comment(commentCreateRequestDto.getComment())
.build();
Users user = userRepository.findByEmail(email).orElseThrow(
() -> new NoSuchElementException("일치하는 메일이 없습니다.")
);
Place place = placeRepository.findById(commentCreateRequestDto.getPlaceId()).orElseThrow(
() -> new NoSuchElementException("일치하는 맛집이 없습니다.")
);
comment.placeComment(place);
comment.UserComment(user);
return commentRepository.save(comment).getId();
}
// comment 조회
@Transactional
public List<CommentListResponseDto> commentList(Long placeId){
Place place = placeRepository.findById(placeId).orElseThrow(
() -> new NoSuchElementException("일치하는 맛집이 없습니다")
);
List<CommentListResponseDto> dtos = new ArrayList<CommentListResponseDto>();
List<Comment> comments = place.getComments();
for(Comment comment : comments){
CommentListResponseDto dto = CommentListResponseDto.builder()
.id(comment.getId())
.userNickname(comment.getUsers().getNickname())
.userEmail(comment.getUsers().getEmail())
.comment(comment.getComment())
.modifiedAt(comment.getModifiedAt())
.build();
dtos.add(dto);
}
return dtos;
}
Data Conversion Error
가 발생 했는데, 그 문제는 h2 database관련 문제였다. mysql로 변경해서 진행하닌까 오류 없이 잘 진행되었다.튜터님께서 h2에서 data 변환 문제가 종종 난다고 하셨다.
mappedby="place"
를 mappedby="comment"
로 잘못 설정하여 List가 저장되지 않고 있던 것이었다. 진짜 별것도 아닌 place
때문에 오늘 8시간을 날렸다.... 후...... 오늘은 기절!
그래도 오늘까지 목표로 하였던, 유저 코멘트 맛집 간의 연관 관계는 마무리가 되었다.
"일치하는 맛집이 없습니다." - place