자바 애플리케이션에서 데이터베이스와 상호작용할 때, 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 속성 ➡️ 커스텀 생성기 또는 시퀀스 이름을 지정하는 데 사용됩니다.
'Framework > JPA' 카테고리의 다른 글
[JPA] 트랜잭션 관리와 영속성 컨텍스트의 관계 (@Transaction, 트랜잭션 전파) (0) | 2024.07.27 |
---|---|
[JPA] JPA Entity 상태 (비영속, 영속, 준영속, 삭제 상태의 이해) (0) | 2024.07.27 |
[JPA] 영속성 컨텍스트란 무엇일까❓ #2(1차 캐시, 변경 감지, 쓰기지연 감소) (0) | 2024.07.27 |
[JPA] 영속성 컨텍스트란 무엇일까❓ (0) | 2024.07.26 |
[JPA] JPA란 무엇일까❓ (0) | 2024.07.25 |