티스토리 뷰

Spring

ERD와 JPA 연관관계

장진혁 2023. 3. 8. 11:12
스프링 숙련주차에서 JPA를 사용하면서
Entity에 들어가는 연관관계를 맵핑하고 생각해야 하는데
머리로만 생각하는 것이 한계가 있다.
ERDcloud를 이용해서 시각적으로 표현해서 엔티티를 완성했다.

그림에서는 잘못 표기 되어있을 수도 있지만
양방향관계로 작성해보았다.
User Entity
@Id
    @Column(name = "USER_ID")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, unique = true)
    private String username;

    @Column(nullable = false)
    private String password;

    @Column(nullable = false)
    @Enumerated(value = EnumType.STRING)
    private UserEnum role;

    /**
     * 사용자(User)는 여러 개의 게시글(Post) 또는 댓글(Comment)을 가질 수 있다"는 관계를 정의
     * User 엔티티 클래스에 "postList"와 "commentList" 라는 두 개의 List 타입의 필드를 정의
     * 각각의 필드가 "user" 필드와 연결되어 있음을 나타낸다.
     * User 엔티티의 인스턴스가 생성될 때, 연결된 Post와 Comment 엔티티의 인스턴스도 함께 생성
     */
    @OneToMany(mappedBy = "user")
    private List<Post> postList = new ArrayList<>();

    @OneToMany(mappedBy = "user")
    private List<Comment> commentList = new ArrayList<>();
Post Entity
@Id
    @Column(name = "POST_ID")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    /**
     * 여러 개의 게시글(Post)은 하나의 사용자(User)에 속한다"는 관계를 정의
     * @JoinColumn 어노테이션을 사용하여 데이터베이스 테이블 간의 외래키(Foreign key)를 지정
     * "USER_ID" 칼럼을 외래키로 사용
     */
    @ManyToOne
    @JoinColumn(name = "USER_ID", nullable = false)
    private User user;

    @Column(nullable = false)
    private String username;

    @Column(nullable = false)
    private String title;

    @Column(nullable = false)
    private String contents;

    @OneToMany(mappedBy = "post")
    @OrderBy(value = "createdAt DESC")
    List<Comment> commentList = new ArrayList<>();
Comment Entity
@Id
    @Column(name = "COMMENT_ID")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    /**
     * 여러 개의 댓글(Comment)은 하나의 게시글(Post)에 속한다"는 관계를 정의
     * @JoinColumn 어노테이션을 사용하여 데이터베이스 테이블 간의 외래키(Foreign key)를 지정
     * "POST_ID" 칼럼을 외래키로 사용
     */
    @ManyToOne
    @JoinColumn(name = "POST_ID", nullable = false)
    private Post post;

    /**
     * 여러 개의 댓글(Comment)은 하나의 회원(User)에 속한다"는 관계를 정의
     * @JoinColumn 어노테이션을 사용하여 데이터베이스 테이블 간의 외래키(Foreign key)를 지정
     * "USER_ID" 칼럼을 외래키로 사용
     */
    @ManyToOne
    @JoinColumn(name = "USER_ID", nullable = false)
    private User user;

    @Column(nullable = false)
    private String username;

    @Column(nullable = false)
    private String comment;

'Spring' 카테고리의 다른 글

Entity 중복된 컬럼 제거  (0) 2023.03.11
연관관계의 주인  (0) 2023.03.09
HTTP, MVC 패턴  (1) 2023.03.05
@Valid 어노테이션으로 Parameter 검증하기 ft.정규식  (0) 2023.03.05
JPA  (0) 2023.03.04
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함