양방향 관계 설정을 통해 게시물과 댓글의 관계를 설정하면, 게시물 엔티티를 조회할 때 해당 게시물에 연결된 댓글들도 함께 조회할 수 있다. 이를 통해 연관된 데이터를 손쉽게 가져올 수 있게 된다.
게시물과 댓글의 관계는 일대다(One-to-Many) 및 다대일(Many-to-One) 관계로 설정할 수 있다. 여기서는 Post
와 Comment
엔티티를 통해 양방향 관계 설정을 예로 설명하겠다.
Post
엔티티 (게시물)@Entity
@Getter
@Setter
@Table(name = "posts")
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String content;
@OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Comment> comments = new ArrayList<>();
// 댓글 추가 메서드
public void addComment(Comment comment) {
comments.add(comment);
comment.setPost(this);
}
}
@OneToMany(mappedBy = "post")
는 Post
엔티티가 여러 개의 Comment
엔티티와 연결될 수 있음을 나타낸다.cascade = CascadeType.ALL
로 설정하면, 게시물을 저장할 때 댓글도 함께 저장되며, 게시물을 삭제할 때 연결된 댓글도 함께 삭제된다.addComment
메서드를 통해 Post
와 Comment
간의 양방향 관계를 설정한다.Comment
엔티티 (댓글)@Entity
@Getter
@Setter
@Table(name = "comments")
public class Comment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String content;
@ManyToOne
@JoinColumn(name = "post_id")
private Post post;
}
@ManyToOne
애노테이션을 사용해 Comment
엔티티가 하나의 Post
엔티티와 연결되도록 한다.@JoinColumn(name = "post_id")
는 comments
테이블에 외래 키 post_id
를 생성해 Post
테이블과의 관계를 나타낸다.양방향 관계가 설정되었으므로, 게시물을 조회할 때 Post
엔티티의 comments
필드가 자동으로 초기화되어 해당 게시물에 연결된 모든 댓글이 함께 조회된다.
Post post = postRepository.findById(1L).get();
System.out.println("게시물 제목: " + post.getTitle());
// 게시물에 연결된 댓글도 함께 조회
for (Comment comment : post.getComments()) {
System.out.println("댓글 내용: " + comment.getContent());
}
위 코드에서 postRepository.findById(1L).get()
으로 게시물 정보를 가져오면, JPA는 Post
엔티티의 comments
필드도 초기화하여 해당 게시물에 달린 댓글들을 함께 조회한다. 즉, 게시물을 조회할 때 연관된 댓글도 데이터베이스에서 가져와 함께 사용할 수 있게 되는 것이다.
양방향 관계를 사용하면:
Post
)을 조회할 때 댓글(Comment
)을 쉽게 함께 가져올 수 있다.Post
객체와 연관된 comments
리스트를 통해 쉽게 조작할 수 있다.@OneToMany
와 @ManyToOne
의 연관 관계양방향 관계 설정 시 양쪽 엔티티에서 데이터를 관리할 수 있지만, 실수로 서로 다른 엔티티에서 데이터를 다르게 설정하는 문제가 발생할 수 있다. 따라서 연관된 객체를 추가하거나 삭제할 때, 양방향 관계를 일관되게 관리하는 것이 중요하다.
정리하면, @OneToMany
와 @ManyToOne
을 활용한 양방향 관계 설정을 통해, 게시물 엔티티만 조회하더라도 JPA가 댓글 엔티티도 함께 가져올 수 있도록 할 수 있다. 이는 연관된 데이터들을 한 번에 조회할 수 있어 편리한 데이터 처리와 관리가 가능하게 한다.