본문 바로가기

개발일지

20231219 - 엔티티 연관관계(게시물, 유저, 댓글)

@Entity어노테이션을 이용해서 JPA를 통해 클래스를 관리해 준다. 그리고 연관관계를 매핑해 주어 연관된 데이터를 참조할 수 있도록 설정할 수 있다.

 

public class Post extends Timestamp {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String title;

    @Column(nullable = false)
    private String content;

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;
    
    ...
}

 

public class User extends Timestamp {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long userId;

    @Column(nullable = false)
    private String username;
    @Column(nullable = false)
    private String password;
    @Column(nullable = false)
    private String email;
    @Column(nullable = false)
    private UserRoleEnum userRole;
	
    ...
}

 

Post 엔티티와 User 엔티티 는 다대일 단방향 관계로 Post는 하나의 User만 가지며 Post 엔티티에서 User를 알 수 있다. DB를 보면 Post 테이블에 외래키로 user_id가 생성된 것을 확인할 수 있다. 

public class Post extends Timestamp {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String title;

    @Column(nullable = false)
    private String content;

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;
    
    @OneToMany(mappedBy = "post")
    private List<Comment> commentList = new ArrayList<>();
    
    ...
}
public class Comment extends Timestamp {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(nullable = false)
    private Long id;

    @Column(nullable = false)
    private String content;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "userId")
    private User user;

    @ManyToOne
    @JoinColumn(name = "postId")
    private Post post;
    
    ...
}

 

Comment 엔티티 는 Post 엔티티 및 User 엔티티 와 다대일 관계를 가지고 있다. Comment 엔티티는 user_id와 post_id를 외래키로 가지고 있으며, Post 엔티티 에서는 Comment 엔티티 와의 일대다 관계로, 연관된 Comment들을 조회할 수 있다. 

'개발일지' 카테고리의 다른 글