2024. 4. 4. 02:12ㆍJAVA/스프링 데이터 JPA
1. @Entity
JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야 한다. @Entity가 붙은 클래스틑 JPA가 관리하게 된다.
※ 주의사항
1. 기본 생성자는 필수다.
2. final 클래스, enum, interface, inner 클래스에는 사용할 수 없다.
3. 저장할 필드에 final을 사용하면 안된다.
2. @Table
@Table은 엔티티와 매핑할 테이블을 지정한다. 생략하면 매핑한 엔티티 이름을 테이블 이름으로 사용한다.
※ 속성
1. name : 매핑할 테이블 이름
2. catalog : catalog 기능이 있는 데이터베이스에서 catalog를 매핑한다.
3. schema : schema 기능이 있는 데이터베이스에서 schema를 매핑한다.
4. uniqueConstraints : DDL 생성 시에 유니크 제약 조건을 만든다. 참고로 이 기능은 스키마 자동 생성 기능을 사용해서 DDL을 만들 때만 사용된다.
3. 다양한 매핑 사용
roleType : 자바의 enum을 사용해서 회원의 타입을 구분한다.
createDate, lastModifiedDate : 자바의 날짜 타입은 @Temporal을 사용해서 매핑한다.
description : 회원을 설명하는 필드는 길이 제한이 없다. 따라서 데이터베이스의 VARCHAR 타입 대신에 CLOB 타입으로 저장해야 한다.
4. 데이터베이스 스키마 자동 생성
persistence.xml에 다음 속성을 추가한다.
<property name="hibernate.hbm2ddl.auto" value="create" />
이 속성을 추가하면 애플리케이션 실행 시점에 데이터베이스 테이블을 자동으로 생성한다. 자동 생성되는 DDL은 지정한 데이터베이스 방언에 따라 달라진다. 스키마 자동 생성 기능을 사용하면 테이블을 직접 작성하는 수고를 덜을 수 있지만 완벽하지는 않으므로 개발 환경에서 사용하거나 매핑을 어떻게 해야 하는지 참고하는 정도로만 사용하는 것이 좋다.
※ 주의사항
운영 서버에서 create, create-drop, update처럼 DLL을 수정하는 옵션은 절대 사용하면 안된다.
5. DDL 생성 기능
스키마 자동 생성하기를 통해 만들어지는 DDL에 제약조건을 걸어보자.
@Entity
@Table(name="MEMBER")
public class Member {
...
@Column(name = "NAME", nullable = false, length = 10)
private String username;
...
}
※ 주의사항
이런 기능들은 단지 DDL을 자동 생성할 때만 사용되고 JPA의 실행 로직에는 영향을 주지 않는다.
6. 기본 키 매핑
JPA가 제공하는 데이터베이스 기본 키 생성 전략은 다음과 같다.
1. 직접 할당 : 기본 키를 애플리케이션에서 직접 할당한다.
@Id
private String id;
2. 자동 생성 : 대리 키 사용 방식
- IDENTITY : 기본 키 생성을 데이터베이스에 위임한다.
CREATE TABLE BOARD {
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
DATA VARCHAR(255)
};
- SEQUENCE : 데이터베이스 시퀀스를 사용해서 기본 키를 할당한다.
CREATE SEQUENCE BOARD_SEQ START WITH 1 INCREMENT BY 1;
CREATE SEQUENCE [sequenceName] START WITH [initialValue] INCREMENT BY [allocationSize]
- TABLE : 키 생성 테이블을 사용한다.
@Entity
@TableGenerator (
name = "TABLE_1",
table = "MY_SEQUENCES",
pkColumnValue = "TABLE_1", allocationSize = 1
)
public class Test {
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "TABLE_1")
...
}
'JAVA > 스프링 데이터 JPA' 카테고리의 다른 글
| 다양한 연관관계 매핑 (0) | 2024.04.18 |
|---|---|
| 연관관계 매핑 기초 (0) | 2024.04.11 |
| 영속성 관리 (0) | 2024.03.27 |
| 데이터베이스 스키마 자동 생성 (0) | 2023.12.27 |
| 객체와 테이블 매핑 (0) | 2023.12.24 |