728x90

자바 애플리케이션에서 데이터베이스와 상호작용할 때, Entity는 중요한 역할을 합니다.

 

JPA(Java Persistence API)에서 Entity데이터베이스의 테이블자바 클래스 간의 매핑을 정의하며, 데이터베이스 작업객체 지향적으로 관리할 수 있게 도와줍니다.

 

이번 포스트에서는 JPA에서의 Entity에 대해 자세히 알아보겠습니다.

 

Entity란❓

 

Entity는 JPA의 핵심 개념 중 하나로, 데이터베이스와 자바 객체 간의 매핑을 나타내는 클래스입니다.

 

데이터베이스의 테이블자바 클래스 간일대일 매핑을 정의합니다.

 

  • 데이터베이스의 각 행 ➡️ 자바 객체의 인스턴스로 매핑
  • 데이터베이스 테이블 ➡️ 자바 클래스에 해당

 

테이블과 매핑 (@Entity)

@Entity
public class Person {
    // ...
}

 

Entity 클래스는 @Entity 어노테이션을 사용하여 정의되며, 클래스엔티티임을 나타냅니다.

 

엔티티는 데이터베이스 테이블과 매핑되는 객체입니다. 따라서 @Entity 어노테이션을 클래스에 붙이면 해당 클래스데이터베이스의 테이블에 매핑됩니다.


테이블 이름 변경 

@Entity
@Table(name = "custom_table_name")
public class Person {
    // ...
}

 

위와 같이 Entity데이터베이스 테이블이름을 다르게 하고 싶다면, @Table 어노테이션을 사용할 수 있습니다.

 

이 경우 Person 클래스"custom_table_name" 이라는 이름의 테이블과 매핑됩니다.

 

 

테이블 매핑 조정 (@Table)

@Table
public class MyEntity {
    // 필드 및 메소드
}

 

@Table 어노테이션은 Java의 JPA에서 Entity 클래스데이터베이스 테이블 간의 매핑세부적으로 조정하는 데 사용됩니다.

 

@Table 어노테이션을 사용하면 엔티티 클래스특정 데이터베이스 테이블매핑되도록 설정할 수 있습니다.

 

즉 매핑할 테이블지정해줍니다.

name 옵션

@Table(name = "custom_table_name")
public class MyEntity {
    // 필드 및 메소드
}

 

데이터베이스에서 테이블의 이름을 지정합니다. 지정하지 않으면, 엔티티 클래스의 이름이 기본 테이블 이름으로 사용됩니다.

 

catalog 옵션

@Table(catalog = "my_catalog")
public class MyEntity {
    // 필드 및 메소드
}

 

데이터베이스의 카탈로그를 지정합니다. 카탈로그는 데이터베이스 내에서 여러 스키마그룹화하는 데 사용될 수 있습니다.

 

schema 옵션

@Table(schema = "my_schema")
public class MyEntity {
    // 필드 및 메소드
}

 

데이터베이스의 스키마를 지정합니다. 스키마는 데이터베이스 객체논리적으로 그룹화하는 방법입니다.

 

 

테이블 매핑 조정 (@Column)

@Column 어노테이션은 Java의 JPA에서 Entity 클래스의 필드 데이터베이스 테이블의 열(column) 간의 매핑세부적으로 정의하는 데 사용됩니다.

@Column
private String name;

 

이 어노테이션을 사용하면 데이터베이스 열(Column)속성들을 조정할 수 있습니다.

 


name 옵션

@Column(name = "employee_name")
private String name;

 

데이터베이스 열의 이름을 지정합니다. 기본값은 필드의 이름입니다.

 

length 옵션

@Column(length = 100)
private String name;

 

문자열 타입의 열에 대해 열의 길이를 지정합니다. 기본값은 255입니다.

 

precision 옵션

@Column(precision = 10, scale = 2)
private BigDecimal salary;

 

숫자 타입에 대해 전체 자릿수를 지정합니다. 주로 BigDecimal 타입에 사용됩니다.

 

scale 옵션

@Column(precision = 10, scale = 2)
private BigDecimal salary;

 

숫자 타입에 대해 소수점 이하 자릿수를 지정합니다. 주로 BigDecimal 타입에 사용됩니다.

 

nullable 옵션

@Column(nullable = false)
private String name;

 

NULL 값허용할지 여부를 지정합니다. 기본값은 true입니다.

 

unique 옵션

@Column(unique = true)
private String email;

 

의 값이 유니크해야 하는지 여부를 지정합니다. 기본값은 false입니다.

 

insertable 옵션

@Column(insertable = false)
private String nonInsertableField;

 

해당 데이터베이스에 삽입할 때 사용될지 여부를 지정합니다. 기본값은 true입니다.

 

 

updatable 옵션

@Column(updatable = false)
private String nonUpdatableField;

 

 

해당 데이터베이스에서 업데이트할 때 사용될지 여부를 지정합니다. 기본값은 true입니다.

 

 

columnDefinition 옵션

@Column(columnDefinition = "TEXT")
private String description;

 

데이터베이스에서 열의 정의직접 지정합니다. 데이터베이스의 특정 SQL 데이터 타입지정할 때 유용합니다.

 

 

기본 키 지정(@Id)

@Id 어노테이션은 Java의 JPA에서 엔티티 클래스의 필드데이터베이스 테이블기본 키(primary key)임을 지정하는 데 사용됩니다.

 

@Id 어노테이션의 주요 기능은 다음과 같습니다.

 

  • 기본 키 지정
    • @Id 어노테이션이 붙은 필드는 엔티티의 기본 키 역할을 하며, 데이터베이스 테이블에서 각 레코드를 고유하게 식별합니다.

또한 이 기본 키(PK)영속성 컨텍스트에서 Entity를 구분하고 관리할 때 사용되는 식별자 역할을 수행합니다.

 

따라서 기본 키(PK)식별자 값넣어주지 않고 저장하면 오류가 발생합니다.

 

근데 @Id 옵션만 설정하면 기본 키 값을 개발자가 직접 확인하고 넣어줘야 하는 불편함이 발생합니다.

 

따라서 기본 키 자동 생성 어노테이션인 @GeneratedValue가 있습니다.

 

기본 키 자동 생성(@GeneratedValue)

@GeneratedValue 어노테이션은 Java의 JPA에서 엔티티의 기본 키 값자동으로 생성하는 방법정의하는 데 사용됩니다.

 

이 어노테이션은 @Id 어노테이션과 함께 사용되며, 기본 키의 값어떻게 생성할지에 대한 전략을 설정할 수 있습니다.

 

 

GenerationType.AUTO

@Entity
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String name;

    // getters and setters
}

 

JPA 구현체 기본 키 생성 전략자동으로 결정합니다.

 

GenerationType.IDENTITY

@Entity
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    // getters and setters
}

 

데이터베이스에서 기본 키 값자동으로 생성합니다. 데이터베이스의 자동 증가(AUTO_INCREMENT) 기능을 사용합니다.

 

GenerationType.SEQUENCE

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.SequenceGenerator;

@Entity
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "employee_seq")
    @SequenceGenerator(name = "employee_seq", sequenceName = "employee_sequence", allocationSize = 1)
    private Long id;

    private String name;

    // getters and setters
}

 

데이터베이스의 시퀀스를 사용하여 기본 키 값을 생성합니다. 

 

generator 속성 ➡️ 커스텀 생성기 또는 시퀀스 이름지정하는 데 사용됩니다.