≣ 목차
테이블 관련
@Entity
JPA를 사용해서 테이블과 매핑할 클래스를 의미하며, 기본 생성자가 무조건 있어야 됩니다.
@Table
속성 | 기능 | 기본값 |
name | 매핑할 테이블 이름 지정 및 매핑 | 객체 이름을 사용 |
catalog | 데이터베이스 catalog 매핑 | |
schema | 데이터베이스 schema 매핑 | |
uniqueConstraints | DDL 생성 시에 유니크 제약 조건 생성 |
@Table(
name = "table_name", // 매핑할 테이블 이름 변경
catalog = "my_catalog", // 데이터베이스 catalog 매핑
schema = "my_schema", // 데이터베이스 schema 매핑
uniqueConstraints = {
@UniqueConstraint(
name = "unique_constraint_name", // 유니크 제약 조건 이름 지정
columnNames = {"column1", "column2"}) // 유니크 제약 적용될 컬럼 지정
}
)
public class MyEntity {
@Id
private Long id;
@Column(name = "column1")
private String column1;
@Column(name = "column2")
private String column2;
}
컬럼 관련
@Column
속성 | 설명 | 기본값 |
name | 필드와 매핑할 테이블의 컬럼 이름 지정 | 필드 이름 |
insertable,updatable | 등록(insert), 변경(update) 가능 여부 | TRUE |
nullable | null 값의 허용 여부 | |
unique | 유니크 제약조건 | |
columnDefinition | 데이터베이스 컬럼 정보를 직접 지정 | |
length | 문자 길이 제약조건 | 255 |
precision,scale | precision은 전체 자릿수를 의미하고 scale은 소수점 이하의 자릿수를 나타냅니다. 예를 들어, 숫자 123.456의 경우 precision은 6이고 scale은 3입니다. double, float 타입에는 적용되지 않습니다. | ※ BigDecimal, BigInteger와 같은 정밀 숫자 타입에 사용가능 |
@Enumerated
자바 enum 타입을 매핑할 때 사용
- EnumType.ORDINAL: enum 순서(0부터 시작하는 인덱스)를 데이터베이스에 저장
- EnumType.STRING: enum 이름(문자열)을 데이터베이스에 저장
public enum RoleType {
USER, ADMIN
}
// ORDINAL인 경우 USER=0, ADMIN=1 으로 저장
// STRING인 경우 USER=USER, ADMIN=ADMIN 으로 저장
@Lob
데이터베이스 BLOB, CLOB 타입과 매핑 하고 싶은 경우 사용합니다. 필드 타입이 문자일 경우 CLOB(예: String, char[])로 매핑되고, 나머지 타입은 BLOB(예: byte[])으로 매핑됩니다.
@Transient
해당 애노테이션은 해당 필드를 데이터베이스에 매핑하지 않도록 지정합니다. 이 애노테이션이 적용된 필드는 데이터베이스에 저장되거나 조회되지 않으며, 주로 자바 메모리에서 임시로 값을 보관할 때 사용됩니다.
기본 키 관련
@Id
기본 키 값을 직접 할당할 경우 사용
@GeneratedValue
JPA에서 엔티티의 기본 키를 자동으로 생성할 때 사용됩니다. 이 애노테이션을 사용하면 데이터베이스에서 기본 키 값을 자동으로 생성할 수 있으며, SEQUENCE, IDENTITY, UUID, AUTO, TABLE와 같은 다양한 전략을 사용할 수 있습니다.
IDENTITY 전략
기본 키 생성을 데이터베이스에 위임하는 전략입니다. MySQL인 경우 AUTO_INCREMENT가 사용되며, 데이터베이스에 INSERT SQL을 실행한 후에 식별자 값을 알 수 있습니다.
그리고 IDENTITY 전략을 사용할 때 em.persist()를 호출하면 flush가 발생하여 식별자가 생성되고, 해당 트랜잭션에서는 이 식별자를 사용할 수 있지만 다른 트랜잭션에서는 아직 커밋되지 않아서 사용할 수 없습니다.
SEQUENCE 전략
시퀀스를 이용해서 기본 키 값을 설정하는 전략입니다. 해당 전략은 시퀀스를 이용하는 전략이기 때문에 시퀀스 기능이 존재하는 오라클, PostgreSQL와 같은 데이터베이스에서 사용 가능합니다.
@SequenceGenerator(
// 애플리케이션 내에서 시퀀스를 구별하는 값으로
// @GeneratedValue generator 옵션에 사용됩니다.
name = "MEMBER_SEQ_GENERATOR",
sequenceName = "MEMBER_SEQ", // 데이터베이스에 저장될 시퀀스 네이밍
initialValue = 1, // 시퀀스의 시작 값 설정
allocationSize = 1 // 시퀀스 한 번 호출에 증가할 양을 설정(대용량 데이터를 삽입할 때 값 증가)
)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, // 시퀀스 전략 사용한다고 설정
generator = "MEMBER_SEQ_GENERATOR") // 사용할 시퀀스 이름 지정
private Long id;
}
IDENTITY, SEQUENCE 차이점
IDENTITY는 특정 테이블의 자동으로 증가하는 고유 값을 생성하는 반면, SEQUENCE는 독립적으로 존재하며 여러 테이블에서 공유할 수 있는 시퀀스를 생성합니다. IDENTITY는 데이터베이스가 자동으로 관리하지만, SEQUENCE는 사용자가 수동으로 호출하여 값을 증가시킬 수 있으며, SEQUENCE는 시작 값, 증가 값 등 다양한 설정이 가능하여 더 많은 기능을 제공합니다.
TABLE
별도의 테이블을 사용하여 기본 키 값을 생성합니다. 모든 데이터베이스에 적용한 전략이지만 성능 최적화 하는게 힘듭니다.
AUTO
JPA가 데이터베이스에 따라 자동으로 적절한 기본 키 생성 전략을 선택합니다.
UUID
UUID를 사용하여 기본 키를 생성하는 방법으로 @GenericGenerator와 함께 사용하여 UUID를 생성할 수 있습니다.
'JAVA > JPA' 카테고리의 다른 글
[Spring + JPA] JPA 상속관계 매핑 (0) | 2024.11.12 |
---|---|
[Spring + JPA] Entity 연관 관계 매핑 - 관계 유형 (0) | 2024.11.08 |
[Spring + JPA] JPA 연관관계 정리 #2 - 양방향 매핑 시 주의사항 (1) | 2024.11.07 |
[Spring + JPA] JPA 연관관계 정리 #1 (0) | 2024.11.06 |
[JPA] 영속성 컨텍스트 개념 정리 (0) | 2024.11.01 |