@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들을 조회할 수 있다.
'개발일지' 카테고리의 다른 글
20231221 - cascade, orphanRemoval (1) | 2023.12.21 |
---|---|
20231220 - 프로그래머스/131128 (0) | 2023.12.20 |
20231218 - 페이징 구현 (0) | 2023.12.18 |
20231217 - Errors (1) | 2023.12.18 |
20231214 - 프로그래머스/42840 (0) | 2023.12.14 |