안녕하세요.
지난 JPA 포스팅에 이어서 이번 포스팅에는 JPA의 Entity 매핑에 대해서 작성을 하려고 합니다.
JPA를 사용하면서 다양한 어노테이션을 사용을 해야하는데 오늘은 JPA에서 사용하는 어노테이션들과 어떻게 java 객체가 DB와 매핑이 되는지 작성을 하겠습니다.
@Entity
- Entity(엔티티)란 JPA에서 관리하는 DB와 매핑되는 객체를 뜻합니다.
- JPA에서 DB 테이블과 매핑할 객체의 클래스에는 @Entity 어노테이션 사용
- Entity 클래스에서는 기본 생성자가 반드시 있어야 하며 final, enum, interface, inner 클래스는 사용할 수 없다.
- name 옵션으로 JPA에서 사용할 엔티티 이름을 지정할 수 있다.
@Table
- Entity와 매핑할 테이블을 지정한다.
- name 속성을 통해 DB 테이블과 매핑
- catalog 속성을 통해 DB catalog와 매핑
- schema 속성을 통해 DB schema와 매핑
- uniqueConstraints 속성을 통해 DDL 생성 시에 유니크 제약 조건을 생성한다. -> DDL 자동 생성은 추후에 자세히...
@Id
- Table의 PK에 해당되는 필드에 사용한다.
- PK값을 DB가 아닌 어플리케이션에서 직접 할당할 경우 @Id 어노테이션만 사용하고 해당 필드에 값을 직접 넣어주면된다.
@GeneratedValue
- PK값을 어플리케이션에서 직접 할당하는게 아니라 DB 옵션을 통해서 자동 생성을 할 때 사용한다. ex) mySql - auto_increment
- IDENTITY, SEQUENCE, TABLE, AUTO 4가지 옵션을 사용한다.
@Column
- 필드와 매핑할 테이블의 컬럼을 정의할 수 있다.
- name 옵션으로 테이블의 컬럼명을 지정한다.
@Entity
@Table(name="tb_user")
public class User{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long seq;
@Column(name="user_id")
String id;
// 기본 생성자
public User(){
}
}
@GeneratedValue 의 종류
1. IDENTITY
- 기본키 생성을 DB에 위임
- MySq, PostgreSQL, SQL Server, DB2에서 사용을 한다.
- IDENTITY 전략은 em.persist() 시점에서 즉시 INSERT 구문을 실행하고 DB에서 식별자를 조회
2. SEQUENCE
- 데이터베이스 시퀀스라는 데이터베이스 오브젝트를 사용하여 유일한 값을 순서대로 생성한다.
- 추가적인 @SequenceGenerator 어노테이션이 필요
- Oracle, PostgreSQL, DB2, H2에서 사용을 한다.
@Entity
@Table(name="tb_user")
@SequenceGenerator(
name = "식별자 생성기 이름", // @GeneratedValue의 generator에 매핑
sequenceName = "오라클에서 생성한 시퀀스 이름",
initialValue = 1, // DDL 생성 시 처음 시작하는 시퀀스 수 지정
allocationSize = 1 // 시퀀스 한번 호출에 증가하는 수 - DB 시퀀스 증가값과 일치시켜야한다.
)
public class User{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator = "식별자 생성기 이름")
Long seq;
@Column
String id;
// 기본 생성자
public User(){
}
}
3. Table
- 키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉내내는 전략
- 모든 데이터베이스에 적용이 가능하지만 성능면에서는 좋지는 않다.
@Entity
@Table(name="tb_user")
@TableGenerator(
name = "식별자 생성기 이름", // @GeneratedValue의 generator에서 사용
table = "키생성 테이블명",
pkColumnValue = "시퀀스 컬럼명",
initialBalue = 0 // 초기값으로 마지막으로 생성된 값이 기준이 된다.
allocationSize = 1 // 시퀀스 한번 호출에 증가하는 수
)
public class User{
@Id
@GeneratedValue(strategy = GenerationType.TABLE,
generator = "식별자 생성기 이름")
Long seq;
@Column
String id;
// 기본 생성자
public User(){
}
}
참고 : 인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 / 김영한 강의
'Spring' 카테고리의 다른 글
Spring JPA / 양방향 연관관계 주의사항 (0) | 2023.06.27 |
---|---|
Spring JPA / Entity 연관관계 (0) | 2023.06.27 |
Spring JPA / JPA (0) | 2023.06.20 |
Spring AOP (0) | 2023.06.13 |
Object Storage 이미지 출력 (0) | 2023.06.09 |