수업/└team프로젝트

[00]샘플 Entity

onlyun 2022. 3. 28. 17:47

 

@ERD를 위해 테이블 자동 생성해주는 Entity 사용

@manytoone이랑 @joincolumn 사용

 

 

1. 프로젝트 설정

(1) Project

-name : second

 

(2) pom.xml

<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper -->
		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-jasper</artifactId>
		</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
		</dependency>

(3) application.properties

server.port=8087
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/busan_db?useSSL=false&serverTimezon=Asia/Seoul&&characterEncoding=UTF-8
spring.datasource.username=sec
spring.datasource.password=1234

#LAZY loading erreor
spring.jackson.serialization.fail-on-empty-beans=false

spring.jpa.properties.hibernate.show_sql=true

#spring.jpa.properties.hibernate.format_sql=true

#logging.level.org.hibernate.type.descriptor.sql=trace

spring.jpa.hibernate.ddl-auto=create
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect

 

(4) DB(MySQL)

 

2. Entity

(1) Board

package com.group.second.entity;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import lombok.Data;

@Entity
@Data
@Table(name="board")
public class Board {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name="bno")
	private Long id;
	
	private String writer; // User userid
	private String title;

	@Lob
	private String content;
	private Date regdate;
	private int hitcount;
	private String role;
	
	//User Mapping
	@ManyToOne
	@JoinColumn(name="userid") //user와 연결된 것의 이름을 지정한 것이지 User의 컬럼명과 매칭한 것 아님. 매칭은 User의 PK와 연결됨.
	private User user;
	
	@ManyToOne
	@JoinColumn(name="curri_course")
	private Curriculum curriculum;
}

└@ManyToOne과 @JoinColumn 사용할 때, 클래스와 필드명으로 사용.

 

(2) User

package com.group.second.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import com.group.second.constant.Role;

import lombok.Data;

@Entity
@Data
public class User {
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id; //user number
	
	private String userid;
	
	@Column(name="password")
	private String pass;
	private String username; //닉넴
	@Enumerated(EnumType.STRING)
	private Role role;
    private Date regdate;
	
}

(3) Reply

package com.group.second.entity;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import lombok.Data;

@Entity
@Data
@Table(name="reply")
public class Reply {
	@Id
	@Column(name="rno")
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;
	@Lob
	private String reply;
	private Date regdate;
	private String replyer;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="user_id")
	private User user;
		
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="bno")
	private Board board; //bno
}

(4) Role - enum

package com.group.second.constant;

public enum Role {
	ADMIN, MANAGER, STUDENT
}

(5) Curriculum

package com.group.second.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;

import lombok.Data;

@Entity
@Data
public class Curriculum {
	
	@Id
	@Column(name="curri_id")
	private long course;
	
//	private String course; //강좌명
	
	private String teacher; //강사 이름
	
	private String content; //내용
	
	
	private String term; //기간
//	private String endDate;  //종료일
}

(6) File

package com.group.second.entity;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import lombok.Data;

@Entity
@Data
@Table(name="file")
public class File {
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;
	private String savefolder;
	private String originfile;
	private String filecontent;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="bno")
	private Board board;
}