Project/Blog
Blog - 5. Model
고마우미
2022. 5. 23. 22:04
[Member]
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@DynamicInsert //null 인값은 default value로 입력
@Entity //User Class가 자동으로 Oracle에 생성
public class Member {
@Id //pk
@GeneratedValue(strategy = GenerationType.IDENTITY) // project에 연결된 db의 넘버링 전략을 따라간다.
private int id; //sequnce //auto_increment
@Column(nullable = false, length = 30, unique = true)
private String username; //user_id
@Column(nullable = false, length = 100) // hash (비밀번호 암호화)
private String password; //user_pw
@Column(nullable = false, length = 50)
private String email;
@ColumnDefault("'user'")
private String role; //Enum을 쓰는게 좋음 //admin, user, manager
@CreationTimestamp //시간이 자동으로 입력
private Timestamp createDate;
}
[Board]
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // project에 연결된 db의 넘버링 전략을 따라간다.
private int id;
@Column(nullable = false, length = 100)
private String title;
@Lob
private String content; //섬머노트 라이브러리 <html> 태그가 섞여서 디자인이 됨
@ColumnDefault("0")
private int count; //조회수
@ManyToOne //Many=Board, User=One
@JoinColumn(name="memberId")
private Member member; //DB는 object를 저장할 수 없다. FK, java는 object를 저장 할 수 있다.
@OneToMany(mappedBy="board", fetch = FetchType.EAGER) //mappedBy 연관관계의 주인이 아니다 (FK가 아니다) = DB에 Column을 만들지 않는다.
private List<Reply> reply;
@CreationTimestamp
private Timestamp createDate;
}
[Reply]
package com.jinseong.blog.model;
import java.sql.Timestamp;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import org.hibernate.annotations.CreationTimestamp;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity
public class Reply {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(nullable = false, length = 200)
private String content;
@ManyToOne
@JoinColumn(name="boardId")
private Board board;
@ManyToOne
@JoinColumn(name="memberId")
private Member member;
@CreationTimestamp
private Timestamp createDate;
}
[실행되는 SQL]
--Member
create table Member (
id number(10,0) generated as identity,
createDate timestamp,
email varchar2(50 char) not null,
passwrod varchar2(100 char) not null,
role varchar2(255 char) default 'user',
username varchar2(30 char) not null,
primary key (id)
);
--Board
create table Board (
id number(10,0) generated as identity,
content clob,
count number(10,0) default 0 not null,
createDate timestamp,
title varchar2(100 char) not null,
memberId number(10,0),
primary key (id)
);
alter table Board
add constraint FKad83dxf0turt4s2e5ijeb4yup
foreign key (memberId)
references Member;
--Reply
create table Reply (
id number(10,0) generated as identity,
content varchar2(200 char) not null,
createDate timestamp,
boardId number(10,0),
memberId number(10,0),
primary key (id)
);
alter table Reply
add constraint FKayalcledc3l0g5lt1balg0jwf
foreign key (boardId)
references Board;
alter table Reply
add constraint FK6kfhyt67t1dcd8gl4u2y3urei
foreign key (memberId)
references Member;