스프링 - Entity란?

2024. 8. 12. 18:12스프링

2024/08/12 

 

※   Entity에 대해 알아보자.

   ▶  Entity란?



       ●  Entity : JPA에서 관리되는 클래스 즉, 객체를 의미한다.
       ●  Entity 클래스는 DB의 테이블과 매핑되어 JPA에 의해 관리된다.

 

   ▶  Entity 클래스 만들기

       ●  예시 - Memo 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;
}

          ▼  SQL 확인

              ○  create memo table

create table memo (
       id bigint not null,
        contents varchar(500) not null,
        username varchar(255) not null,
        primary key (id)
);

              ○  alter username unique

alter table memo 
       add constraint username_UK unique (username);

 

       ●  @Entity : JPA가 관리할 수 있는 Entity 클래스로 지정할 수 있다.
         ○  @Entity(name = "Memo") : Entity 클래스 이름을 지정할 수 있다. (default클래스명)
         ○  JPA가 Entity 클래스를 인스턴스화 할 때 기본 생성자를 사용하기 때문에
             반드시 현재 Entity 클래스에서 기본 생성자가 생성되고 있는지 확인

 

       ●  @Table : 매핑할 테이블을 지정해준다.
         ○  @Table(name = "memo") : 매핑할 테이블의 이름을 지정할 수 있다.  (default클래스명)

 

       ●  @Column
         ○  @Column(name = "username") : 필드와 매핑할 테이블의 컬럼을 지정할 수 있다. (default: 객체의 필드명)
         ○  @Column(nullable = false) : 데이터의 null 값 허용 여부를 지정할 수 있다. (default: true)
         ○  @Column(unique = true) : 데이터의 중복 값 허용 여부를 지정할 수 있다. (default: false)
         ○  @Column(length = 500) : 데이터 값(문자)의 길이에 제약조건을 걸 수 있다. (default: 255)

 

       ●  @Id : 테이블의 기본 키를 지정해준다.
         ○  이 기본 키는 영속성 컨텍스트에서 Entity를 구분하고 관리할 때 사용되는 식별자 역할을 수행한다.
             👉 따라서 기본 키 즉, 식별자 값을 넣어주지 않고 저장하면 오류가 발생

         ○  @Id 옵션만 설정하면 기본 키 값을 개발자가 직접 확인하고 넣어줘야 하는 불편함이 발생한다.
               ✅
@GeneratedValue 옵션을 추가하면 기본 키 생성을 DB에 위임할 수 있다.

 

     📌  @GeneratedValue(strategy = GenerationType.IDENTITY)

@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;
}

              ○  id bigint not null auto_increment : auto_increment 조건이 추가된 것을 확인할 수 있다.
              ○  해당 옵션을 추가해주면 개발자가 직접 id 값을 넣어주지 않아도 자동으로 순서에 맞게 기본 키가 추가된다.

 

          ▼  SQL 확인

              ○  create memo table

create table memo (
       id bigint not null auto_increment,
        contents varchar(500) not null,
        username varchar(255) not null,
        primary key (id)
);

 

 

 

 

 

 


오늘은 Entity의 개념과 JPA에서
Entity 클래스를 어떻게 다루는지 알아보았습니다.
다음시간에는 영속성 컨텍스트에 대해 알아보겠습니다.

 


※ 위 이미지들은 스파르타코딩클럽에 저작권이 있으므로 무단 도용 금지 및 상업 목적으로 사용할 수 없습니다.

'스프링' 카테고리의 다른 글

스프링 - Filter란?  (0) 2024.08.14
스프링 - 영속성 컨텍스트란?  (0) 2024.08.13
스프링 - Spring Data JPA란 무엇일까?  (0) 2024.08.09
스프링 - IoC Container와 Bean  (0) 2024.08.08
쿠키와 세션이란 무엇일까?  (0) 2024.08.05