스파르타 코딩 클럽 | 자바 심화 과정/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 자동 실행됨