Blog 테이블 생성하기 (User, Board ,Reply)
User 테이블 생성



package com.junho.blog.model;
import java.sql.Timestamp;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.CreationTimestamp;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
// ORM -> java(다른 언어) -> 언어로 만든 변수들을 테이블로 매핑시켜주는것.
@Entity // User 클래스가 MySQL에 테이블이 생성이 된다.
public class User {
@Id // Primary Key
@GeneratedValue(strategy = GenerationType.IDENTITY) // 프로젝트에서 연결된 DB의 넘버링 전략을 따라간다.
private int id; // 시퀀스, auto_increment
@Column(nullable=false, length = 30)
private String username; // 아이디
@Column(nullable=false, length = 30)
private String password;
@Column(nullable=false, length = 30)
private String email;
@ColumnDefault("'user'")
private String role; // Enum을 쓰는게 좋다. // admin, user, manager
@CreationTimestamp // 시간 자동 입력
private Timestamp createData;
}
확인 해보면 테이블이 생성된 걸 알 수 있습니다!
Board 테이블 생성

@Lob : 대용량 데이터를 저장할 수 있는 컬럼을 생성
@ManyToOne : 한명의 유저는 여러개의 게시글을 사용할 수 있다는 의미입니다.
@JoinColumn(name="userId") : FK로 다른 테이블과 조인을 해야하는데, 그걸 설정해준느 어노테이션
테이블이 생성될 때는 name의 값으로 컬럼명이 지어진다

잠시 살펴보니 @lob으로 설정한 컬럼이 tinytext로 설정이 되었네요
@lob의 디폴트가 이젠 tinytext로 변경이 된거같네요.
따라서 이걸 해결하기 위해
@Column(columnDefinition = "longtext") // 대용량 데이터
private String content;
로 다시 정의하겠습니다.
package com.junho.blog.model;
import java.sql.Timestamp;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.CreationTimestamp;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.Lob;
import jakarta.persistence.ManyToOne;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // auot_increment
private int id; // 키값
@Column(nullable=false,length=100)
private String title; // 제목
@Column(columnDefinition = "longtext") // 대용량 데이터
private String content; //섬머노트 라이브러리 <html>태그가 섞여서 디자인이 됨.
@ColumnDefault("0")
private int count; // 조회수
@ManyToOne // Many = board, User = One
@JoinColumn(name="userId")
private User user; //DB는 오브젝트를 저장할 수 없다. // 자바는 오브젝트를 저장할 수 있다. // FK
@CreationTimestamp
private Timestamp createDate; // 생성일
}

Reply 테이블 생성

package com.junho.blog.model;
import java.sql.Timestamp;
import org.hibernate.annotations.CreationTimestamp;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
public class Reply {
@Id // Primary Key
@GeneratedValue(strategy = GenerationType.IDENTITY) // auot_increment
private int id;
@Column(nullable=false, length = 200)
private String content;
@ManyToOne // Many = Reply, User = One
@JoinColumn(name="boardId")
private Board board;
@ManyToOne // Many = Reply, User = One
@JoinColumn(name="userId")
private User user;
@CreationTimestamp // 시간 자동 입력
private Timestamp createDate;
}
Board 테이블 수정
추가사항

@OneToMany(mappedBy="board",fetch = FetchType.LAZY) // mappedBy 연과관계의 주인이 아니다 (난 FK가 아니예요) DB에 칼럼을 만들지 마세요
private List<Reply> reply;
Board 테이블을 사용할 시 댓글도 같이 보일 수도 있고 안보일 수게 처리를 할려고 합니다.

Reply 모델의 설정한 변수명을 맵핑네임에 넣는 것입니다.