
JPA에서 실제 테이블에 연결하는 객체를 엔티티라고 부른다.
엔티티와 테이블을 정확하게 매핑해서 사용해야하기 때문에 매핑을 위한 여러 Annotation이 존재한다.
JPA는 엔티티와 테이블을 매핑하고, 데이터베이스 스키마를 자동으로 생성한다.
운영 장비에는 절대로 create, create-drop, update를 사용하면 안된다.
hibernate.hbm2ddl.auto
1. @Column : 컬럼 매핑
2. @Temporal : 날짜 타입 매핑
3. @Enumerated : enum 타입 매핑
4. @Lob : BLOB, CLOB 매핑
5. @Transient : 특정 필드를 컬럼에 매핑하지 않음(매핑 무시)
name : 필드와 매핑할 테이블의 컬럼 이름(기본값은 객체의 필드이름)
insertable : 엔티티 저장 시 이 컬럼도 함께 등록 (기본값 TRUE, FALSE 설정 시 이 필드를 등록하지 않음)
updatable : 엔티티 수정 시 이 컬럼도 함께 수정(기본값 TRUE, FALSE 설정 시 이 필드를 수정하지 않음)
nullable(DDL) : null 값의 허용여부를 물으며, false로 설정하면 DDL 생성시에 not null 제약조건이 붙는다.
unique(DDL) : @Table의 uniqueConstraints와 같지만 한 컬럼에 간단히 유니크 제약 조건을 걸 때 사용한다. (하지만 이름을 줄 수 없어 선호하진 않는다.)
columnDefinition(DDL) : 데이터 베이스에 컬럼 정보를 직접 줄 수 있다.
length(DDL) : 문자 길이 제약조건이며, String 타입에만 사용한다.
precision, scale(DDL) : BigDecimal,BigInteger 등에서 사용하며 precision은 소수점을 포함한 전체 자리수를 명시하고, scale은 소수의 자리수를 명시한다.
자바 enum 타입을 매핑할 때 사용한다.
기본값은 ORDINAL인데 요구 사항이 늘어나 enum에 데이터를 추가한 경우 순서가 바뀌면 데이터가 엉망이 되므로 항상 STRING을 사용하도록 하자.
Member member = new Member();
member.setId(1); //직접 할당
memberRepository.save(member);
1. IDENTITY 전략
2. SEQUENCE 전략
@Entity
@SequenceGenerator(
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;
}
name : 식별자 생성기 이름 (필수)
sequenceName : DB에 등록되어 있는 시퀀스 이름
initialValue : DDL 생성 시에만 사용되며, 시퀀스 DDL을 처음 생성할 때 시작할 수를 정한다. (기본값은 1)
allocationSize : 시퀀스 한 번 호출에 증가하는 수이다.(기본값이 50이기 때문에 DB에 시퀀스 값이 하나씩 증가하도록 설정되어 있으면 이 값을 반드시 1로 설정해야한다.)
catalog, schema : DB의 catalog와 schema이름
3. TABLE 전략
create table MY_SEQUENCES (
sequence_name varchar(255) not null,
next_val bigint,
primary key ( sequence_name )
)
@Entity
@TableGenerator(
name = "MEMBER_SEQ_GENERATOR",
table = "MY_SEQUENCES",
pkColumnValue = “MEMBER_SEQ", allocationSize = 1)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.TABLE,
generator = "MEMBER_SEQ_GENERATOR")
private Long id;
}
name : 식별자 생성기 이름 (필수)
table : 키 생성 테이블명
pkColumnName : 시퀀스 컬럼명
valueColumnName : 시퀀스 값 컬럼명
pkColumnValue : 키로 사용할 값 이름
initialValue : 초기 값 (기본값 0)
allocatoinSize : 시퀀스 한 번 호출에 증가하는 수 (기본값 50)
catalog, schema : DB의 catalog와 schema이름
uniqueConstraints : 유니크 제약조건을 지정할 수 있다.
4. AUTO 전략
참고 : https://www.inflearn.com/course/ORM-JPA-Basic/dashboard 김영한 님의 JPA 프로그래밍 강의
https://book.naver.com/bookdb/book_detail.nhn?bid=9252528 자바 ORM 표준 JPA 프로그래밍
위의 책을 참고하고, 강의를 수강하면서 작성한 글입니다.
틀린 부분 등 다양한 피드백 환영합니다.