
1. User 만들기
- 미리 생성자 만들어 놓기 → User에 오류가 터짐
빈 생성자를 때리기 때문에 오류 발생 → @NoArgsConstructor가 필요함
package shop.mtcoding.blog.board;
import jakarta.persistence.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import shop.mtcoding.blog.user.User;
import shop.mtcoding.blog.util.MyDateUtil;
import java.sql.Timestamp;
@Data // 변경되는 데이터에만 setter가 필요함
@Table(name = "board_tb")
@Entity
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String title;
private String content;
// private String username;
// username은 user_tb에도 있기에 외래키로 연관관계 맺어야 함
// @JoinColumn(name = "user_id") 직접 지정할 때
@ManyToOne // ORM 할 것이기에 user 객체 필요
private User user; // DB에 컬럼명 : user_id (변수명_PK키)
@CreationTimestamp // PC로 인해 DB에 INSERT될 때 날짜 주입
private Timestamp createdAt;
public String getBoardDate(){
return MyDateUtil.timestampFormat(createdAt);
}
}

2. Board_tb에서 연관관계 맺기
- 오류 수정 → step3 기초 셋팅하기
- username과 게시글은 1:N 관계
- 테이블은 원자성을 가지는 스칼라 데이터만 가지고 있음
- 따로 DTO를 만들지 않아도 user_id에 담을 수 있음
- join해도 board로 받을 수 있음
package shop.mtcoding.blog.board;
import jakarta.persistence.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import shop.mtcoding.blog.user.User;
import shop.mtcoding.blog.util.MyDateUtil;
import java.sql.Timestamp;
@Data // 변경되는 데이터에만 setter가 필요함
@Table(name = "board_tb")
@Entity
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String title;
private String content;
// private String username;
// username은 user_tb에도 있기에 외래키로 연관관계 맺어야 함
// @JoinColumn(name = "user_id") 직접 지정할 때
@ManyToOne // ORM 할 것이기에 user 객체 필요
private User user; // DB에 컬럼명 : user_id (변수명_PK키)
@CreationTimestamp // PC로 인해 DB에 INSERT될 때 날짜 주입
private Timestamp createdAt;
public String getBoardDate(){
return MyDateUtil.timestampFormat(createdAt);
}
}
3. 더미 데이터 추가하기
insert into user_tb (username, password, email, created_at) values ('ssar','1234','ssar@nate.com',now());
insert into user_tb (username, password, email, created_at) values ('cos','1234','cos@nate.com',now());
insert into user_tb (username, password, email, created_at) values ('love','1234','love@nate.com',now());
insert into board_tb (title, content, user_id, created_at) values ('제목1','내용1',1,now());
insert into board_tb (title, content, user_id, created_at) values ('제목2','내용2',1,now());
insert into board_tb (title, content, user_id, created_at) values ('제목3','내용3',2,now());
insert into board_tb (title, content, user_id, created_at) values ('제목4','내용4',3,now());

4. User 를 Builder 패턴으로 수정하
package shop.mtcoding.blog.user;
import jakarta.persistence.*;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import shop.mtcoding.blog.util.MyDateUtil;
import java.sql.Timestamp;
@NoArgsConstructor
@Data
@Table(name = "user_tb")
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(unique = true)
private String username;
private String password; // 암호화해서 넣으면 터지기 때문에 길이 제한시 주의해야 함
private String email;
@CreationTimestamp // PC로 인해 DB에 INSERT될 때 날짜 주입
private Timestamp createdAt;
public String getBoardDate(){
return MyDateUtil.timestampFormat(createdAt);
}
@Builder
public User(Integer id, String username, String password, String email, Timestamp createdAt) {
this.id = id;
this.username = username;
this.password = password;
this.email = email;
this.createdAt = createdAt;
}
}
Share article