Board 테이블
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder // 빌더 패턴
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // auto_increment
private int id;
@Column(nullable = false, length = 100)
private String title;
@Lob
private String content;
@ColumnDefault("0") // 문자가 아니니까 ' '를 붙여줄 필요가 없다.
private int count; // 조회수
@ManyToOne
@JoinColumn(name = "userId")
private User user;
@CreationTimestamp
private Timestamp createDate;
}
@Lob
content는 섬머노트라는 라이브러리를 쓸 예정으로 작성한 글이 디자인이 돼서 들어가게 된다.
디자인이 될 때 <html> 태그가 섞여서 디자인이 되는데 글자의 용량이 굉장히 커지기 때문에 @Lob을 붙어줘야 한다.
@Lob은 대용량 데이터를 쓸 때 사용한다.
@JoinColumn(name="userId")
DB는 오브젝트를 저장할 수 없어서 FK를 사용하는데 ORM인 자바에서는 오브젝트를 저장할 수 있기 때문에 FK로 찾는 것이 아닌 user 오브젝트를 바로 넣으면 된다.
private int userId; // 원래 FK 방식
private User user;
DB는 오브젝트를 저장할 수 없고 자바는 저장할 수 있으므로 충돌이 발생하는데 자바 프로그램은 DB의 자료형에 맞춰서 테이블을 만들어줘서 충돌을 막는다.
@JoinColumn(name="userId") 어노테이션을 통해 실제 DB에는 userId로 만들어지도록 하는 방법을 이용한다. 실제 DB 필드명에 userId로 생성될 것이다.
@ManyToOne
Many는 Board, One은 User를 뜻하는데 한명의 User가 여러개의 게시글을 작성할 수 있다는 의미이다. 만약 @OneToOne이었으면 User 한명당 하나의 게시글만 작성할 수 있다는 것이 된다.
실행해보면 잘 만들어지는 것을 볼 수 있다.
또한 Board 테이블의 정보를 눌러 FK 정보를 보면 board라는 테이블에 userId라는 컬럼은 User 테이블의 Id를 참조하고 있다고 나온다. @ManyToOne와 @JoinColumn(name = "userId")에 의해 자동으로 조건이 생성된 것이다.
Reply 테이블
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
@Entity
public class Reply {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // auto_increment
private int id;
@Column(nullable = false, length = 200)
private String content;
@ManyToOne // 하나의 게시글에 여러 개의 답변 존재
@JoinColumn(name = "boardId")
private Board board;
@ManyToOne // 한명의 유저가 여러 개의 답변 작성 가능
@JoinColumn(name = "userId")
private User user;
@CreationTimestamp
private Timestamp createdate;
}
출처 : https://www.youtube.com/watch?v=6bhF5o4gAOs&list=PL93mKxaRDidECgjOBjPgI3Dyo8ka6Ilqm
'Spring > Blog 만들기 with SpringBoot' 카테고리의 다른 글
JSON (0) | 2022.05.10 |
---|---|
연관관계의 주인 (0) | 2022.05.08 |
Blog 테이블 생성 - User (0) | 2022.05.01 |
yaml 설정 (0) | 2022.04.28 |
Lombok 세팅 (0) | 2022.04.28 |