본문 바로가기
JPA

[JPA]엔티티 설계

by whitedeveloper 2023. 1. 17.

#.Spring Data JPA를 사용하면 데이터베이스에 테이블을 생성하기 위해 직접 쿼리를 작성하 필요가 없다.

 

#.JPA에서 엔티티는 데이터베이스의 테이블에 대응하는 클래스

-엔티티에는 데이커베이스에서 쓰일 테이블과 칼럼을 정의

-어노테이션을 사용하면 테이블 간의 연관관계를 정의할 수 있다,

데이터베이스 테이블

package.com.springboot.jpa.data.entity;

import javax.persistence.*;
import java.time.LocalDataTime;

@Entity
@Table(name = "product")
public class Product {
	
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long number;
    
    @Column(nullable = false)
    private String name;
    
    @Column(nullable = false)
    private Integer stock;
    
    private LocalDataTime createdAt;
    
    private LocalDataTime updatedAt;
    
    ..getter/setter 생략

}

 

#,엔티티 기본 어노테이션

- @Entity

 >해당 클래스가 엔티티임을 명시하기 위한 어노테이션

 >클래스 자체는 테이블과 일대일로 매칭되며, 해당 클래스의 인스턴스는 매핑되는 테이블에서 하나의 레코드를 의미

 

-@Table

 > 테이블과 매핑되므로 특별한 경우가 아니면 필요하지않다.

 > 클래스의 이름테이블의 이름을 서로 다르게 지정하는 경우에 사용 ->@Table(name = 값)

 > 명시하지 않으면 동일하다는 의미

 

-@Id

 > 엔티티 클래스의 필드는 테이블의 칼럼과 매핑

 > @Id 어노테이션이 선언된 필드는 테이블의 기본값 역할로 사용

 > 모든 엔티티는 @Id 어노테이션 필요

 

-@GeneratedValue

 > 일반적으로 @Id 어노테이션과 함께 사용, 해당 필드의 값을 어떤 방식으로 자동 생성할지 결정할 때 사용

 > 직접할당(어노테이션 사용x)

     >어플리케이션에서 자체적으로 고유한 기본값을 생성할 경우 사용하는 방식

     >내부에 정해진 규칙에 의해 기본값을 생성하고 식별자로 사용

 >AUTO

   >@GeneratedValue의 기본 설정값

   > 기본값을 사용하는 데이터베이스에 맞게 자동 생성

 > IDENTITY

   >기본값 생성을 데이터베이스에 위임하는 방식

   > AUTO_INCREMENT를 사용해 기본값을 생성

> SEQUENCE

   >@SequenceGenerator 어노테이션으로 식별자 생성기를 설정하고 이를 통해 값을 자동 주입받는다.

   >SequenceGenerator 를 정의할 때는 name, sequenceName, allocationSize를 활용

   >@GeneratedValue에 생성기를 설정

 >TABLE

   >어떤 DBMS를 사용하더라도 동일하게 동작하기를 원할 경우 사용

   > 식별자로 사용할 숫자의 보관 테이블을 별도로 생성해서 엔티티를 생성할 때마다 값을 갱신하며 사용

   > @TableGenerator 어노테이션으로 테이블 정보를 설정

 

-@Column

>엔티티 클래스의 필드는 자동으로 테이블 칼럼으로 매핑

>별다른 설정하지 않을 예정이라면 명시하지않아도 괜찮다.

>@Column 어노테이션을 사용하는 요소

  >name : 데이터베이스의 칼럼명을 설정하는 속성, 명시하지 않으면 필드명으로 지정

  >nullable : 레코드를 생성할 때 칼럼 값에 null 처리가 가능한지를 명시하는 속성

  >length :  데이터베이스에 저장하는 데이터의 최대 길이를 설정합니다.

  >unique : 해당 칼럼을 유니크로 설정

 

-@Transient

>엔티티 클래스에는 선언돼 있는 필드지만 데이터베이스에서는 필요없을 경우 사용하여 데이터베이스에서 이용하지 않게 할 수 있다.

'JPA' 카테고리의 다른 글

[JPA]어노테이션  (0) 2023.04.11
[JPA]repository interface 설계  (0) 2023.01.18