Entity
- Spring Data JPA를 사용하면 데이터베이스에 테이블을 생성하기 위해 직접 쿼리를 작성할 필요가 없음
- 이 기능을 가능하게 하는 것이 Entity
- JPA에서 Entity는 데이터베이스의 테이블에 대응하는 클래스
- Entity에는 데이터베이스에 쓰일 테이블과 칼럼을 정의함
Entity 관련 어노테이션
@Entity
- 해당 클래스가 Entity임을 명시하기 위한 어노테이션
- 클래스 자체는 테이블과 일대일로 매칭되며, 해당 클래스의 인스턴스는 매핑되는 테이블에서 하나의 레코드를 의미
@Table
- 클래스의 이름과 테이블의 이름을 다르게 지정해야 하는 경우 사용
- 이 어노테이션을 명시하지 않으면 클래스 이름과 테이블 이름이 일치하는 것으로 판단
- @Table(name = "이름") 형태로 사용
@Id
- Entity 클래스의 필드는 테이블의 칼럼과 매핑됨
- 이 어노테이션이 선언된 필드는 테이블의 기본값 역할
- 모든 엔티티는 @Id 어노테이션이 필요함
@GeneratedValue
- 이 어노테이션은 해당 필드의 값을 어떤 방식을 자동 생서할지 결정할 때 사용
- 일반적으로 @Id 어노테이션과 함께 사용
- 값 생성 방식은 다음과 같다.
GeneratedValue를 사용하지 않는 방식(직접 할당)
- 애플리케이션에서 자체적으로 고유한 기본값을 생성할 경우 사용하는 방식
- 내부에 정해진 규칙에 의해 기본값을 생성하고 식별자로 사용
AUTO
- @GeneratedValue의 기본 설정값
- 기본값을 사용하는 데이터베이스에 맞게 자동 생성함
IDENTITY
- 기본값 생성을 데이터베이스에 위임하는 방식
- 데이터베이스의 AUTO_INCREMENT를 사용해 기본값을 생성함
SEQUENCE
- @SequenceGenerator 어노테이션으로 식별자 생성기를 설정하고 이를 통해 값을 자동 주입받음
- SequenceGenerator를 정의할 때는 name, sequenceName, allocationSize를 활용합니다.
- @GeneratedValue에 생성기를 설정
TABLE
- 어떤 DBMS를 사용하더라도 동일하게 동작하기를 원할 경우 사용
- 식별자로 사용할 숫자의 보관 테이블을 별도로 생성해서 Entity를 생성할 때마다 값을 갱신하며 사용
- @TableGenerator 어노테이션으로 테이블 정보를 설정
@Column
- 필드에 몇가지 설정을 더할 때 사용
- name: 데이터베이스의 칼럼명을 설정하는 속성, 명시하지 않으면 필드명으로 지정
- nullable: 레코드를 생성할 때 칼럼 값에 null 처리가 가능한지를 명시하는 속성
- length: 데이터베이스에 저장하는 데이터의 최대 길이를 설정
- unique: 해당 칼럼을 유니크로 설정
@Transient
- 데이터베이스에서는 필요 없는 필드일 경우 사용
Entity 예시 코드
package org.spring.study.Domain;
import jakarta.persistence.*;
import java.time.LocalDateTime;
@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 price;
@Column(nullable = false)
private Integer stock;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getPrice() {
return price;
}
public void setPrice(Integer price) {
this.price = price;
}
public Integer getStock() {
return stock;
}
public void setStock(Integer stock) {
this.stock = stock;
}
public void setNumber(Long number) {
this.number = number;
}
public Long getNumber() {
return number;
}
public LocalDateTime getCreatedAt() {
return createdAt;
}
public void setCreatedAt(LocalDateTime createdAt) {
this.createdAt = createdAt;
}
}
참고 자료
스프링 부트 핵심 가이드 "스프링 부트를 활용한 애플리케이션 개발 실무" , 장정우, 2022
'Development > Spring' 카테고리의 다른 글
[Spring] 영속성 컨텍스트 (Persistence Context) (0) | 2024.01.30 |
---|---|
[Spring] Springboot Swagger 3 적용하기 (Springdoc-OpenAPI3) (0) | 2024.01.30 |
[Spring] JPA (Java Persistence API), Hibernate, Spring Data JPA (1) | 2024.01.23 |
[Spring JPA] DDL, DDL 옵션 (0) | 2024.01.16 |
[Spring] 스프링 부트의 동작 방식 (0) | 2024.01.15 |