스파르타 코딩 클럽 | 자바 심화 과정/Spring Master (입문 주차)
Entity - #1. Entity (@Entity, @Table, @ Column, @ Id, @ GeneratedValue)
luminous_dev
2025. 2. 1. 16:58
- JPA에서 관리되는 클래스
- 데이터를 저장하고 관리하는 데 필요한 구조를 정의
- 테이블의 한 행에 해당되는 데이터
- = 객체
- Entity 클래스는 DB 테이블과 매핑되어 JPA에 의해 관리됨
Entity 프로젝트 설정 방법
더보기








DB 연결
1. Database 탭을 클릭 > + 버튼

2. Data Source > MySQL

3. user, password,database 정보 추가

xml 설정
1. resources > META - INF > 파일 만들기 > persistence.xml 생성

persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
<persistence-unit name="memo">
<class>com.sparta.entity.Memo</class>
<properties>
<property name="jakarta.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="jakarta.persistence.jdbc.user" value="root"/>
<property name="jakarta.persistence.jdbc.password" value="비밀번호 적기"/>
<property name="jakarta.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/memo"/>
<property name="hibernate.hbm2ddl.auto" value="create" />
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
</properties>
</persistence-unit>
</persistence>

2. Gradle 구성에 JPA hibernate 및 MySQL 추가해주기

Gradle 구성 열기
plugins {
id 'java'
}
group = 'com.sparta'
version = '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
// JPA 구현체인 hibernate
implementation 'org.hibernate:hibernate-core:6.1.7.Final'
// MySQL
implementation 'mysql:mysql-connector-java:8.0.28'
// mysql의 버전이 8.1 이상인 경우
// implementation 'com.mysql:mysql-connector-j:8.2.0'
testImplementation platform('org.junit:junit-bom:5.10.0')
testImplementation 'org.junit.jupiter:junit-jupiter'
}
test {
useJUnitPlatform()
}
1. EntityTest 클래스 만들기
EntityTest
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
public class EntityTest {
EntityManagerFactory emf;
EntityManager em;
@BeforeEach
void setUp() {
emf = Persistence.createEntityManagerFactory("memo");
em = emf.createEntityManager();
}
@Test
void test1() {
}
}
만약 jarkarta 관련된 부분에서 빨간 줄이 생기면 gradle > update
2. Memo Class 만들기
Memo
package com.sparta.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
@Entity // JPA가 관리할 수 있는 Entity 클래스 지정
@Table(name = "memo") // 매핑할 테이블의 이름을 지정
public class Memo {
@Id
private Long id;
// nullable: null 허용 여부
// unique: 중복 허용 여부 (false 일때 중복 허용)
@Column(name = "username", nullable = false, unique = true)
private String username;
// length: 컬럼 길이 지정
@Column(name = "contents", nullable = false, length = 500)
private String contents;
}
@Entity
어노테이션 | 내용 |
@Entity | JPA가 관리할 수 있는 Entity 클래스로 지정할 수 있음 |
@Entity(name = "Memo") | Entity 클래스 이름을 지정할 수 있음 (default : 클래스 명) |
JPA가 Entity 클래스를 인스턴스화 할 때 기본 생성자를 사용하기 때문에
반드시 현재 Entity 클래스에서 기본 생성자가 생성되고 있는지 확인해야 함
@Table
어노테이션 | 내용 |
@Table | 매핑할 테이블을 지정해줌 |
@ Table(name = "memo") | 매핑할 테이블의 이름을 지정할 수 있음 (default : Entity 명) |
@ Column
어노테이션 | 내용 |
@ Column (name = "username") | 필드와 매핑할 테이블의 컬럼 지정 (default: 객체의 필드명) |
@ Column (nullable = false) | 데이터의 null 값 허용 여부 지정 (default: true) |
@Column(unique = true) | 데이터의 중복 값 허용 여부를 지정 |
@Column(length = 500) | 데이터 값(문자)의 길이에 제약조건 걸기 (default: 255) |
@ Id (PK): 테이블의 기본 키 지정
- 영속성 컨텍스트에서 Entity 구분 / 관리할 때 사용되는 식별자 역할 수행
- 기본키 (식별자 값) 넣어주지 않고 저장하면 오류 발생
- @Id 옵션만 설정하면 기본 키 값을 개발자가 직접 확인하고 넣어줘야 하는 불편함 발생
- @ GeneratedValue 추가 : 기본 키 생성 DB에 위임할 수 있음
package com.sparta.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
@Entity // JPA가 관리할 수 있는 Entity 클래스 지정
@Table(name = "memo") // 매핑할 테이블의 이름을 지정
public class Memo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// nullable: null 허용 여부
// unique: 중복 허용 여부 (false 일때 중복 허용)
@Column(name = "username", nullable = false, unique = true)
private String username;
// length: 컬럼 길이 지정
@Column(name = "contents", nullable = false, length = 500)
private String contents;
}
Indentity 전략
@GeneratedValue(strategy = GenerationType.IDENTITY)
- id bigint not null auto_increment : auto_increment 조건 추가
- 개발자가 직접 id값을 넣어주지 않아도 자동으로 순서에 맞게 기본 키가 추가됨
코드 실행시키는 법
EntityTest.java에서 @Test옆의 실행 버튼 누르기
그럼 SQL 자동 실행됨