객체와 테이블 매핑(@Entity,@Table)
@Entity
JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수
기본 생성자 필수(파라미터가 없는 public or protected)
속성 name은 JPA에서 사용할 Entity이름을 지정할 수 있다.(기본값: 클래스 이름)
@Table
Entity와 매핑할 테이블을 지정한다.
속성
필드와 컬럼 매핑
매핑 어노테이션
@Column 속성
unique를 사용하여 제약조건을 걸 시 제약조건 이름이 랜덤값으로 나와 사용하지 않는 것이 좋다.
@Table의 uniqueConstraints로 이름을 설정하는 것이 오류시 잡아내기 쉬움
@Enumerated
ORDINAL 사용 시 Enum 클래스에 새로운 요소를 추가할 때 버그가 생길 수 있으니 STRING을 사용
@Transient
필드 매핑이 이루어지지 않는다.
데이터베이스에 저장되지 않고 조회도 되지 않는다.
메모리상에서 임시로 어떤 값을 보관하고 싶을 때 사용한다.
기본키 매핑
직접 할당시:@Id 만 사용
자동 생성(@GeneratedValue)
IDENTITY: 데이터베이스에 위임, MYSQL
SEQUENCE: 데이터베이스 시퀀스 오브젝트 사용, ORACLE -> @SequenceGenerator 필요
AUTO: 방언에 따라 자동 지정, 기본값
@IDENTITY
MYSQL,PostgreSQL,SQL server, DB2에서 사용한다.
MY_SQL의 AUTO_INCREASEMENT는 데이터베이스에 INSERT SQL을 실행 한 이후에 ID값을 할 수 있기 때문에 Entity가 영속화될 때 즉시 INSERT SQL을 날려 DB에서 식별자를 조회한다.
@SEQUENCE
오라클, PostgreSQL, DB2, H2 데이터베이스에서 사용한다.
데이터베이스 시퀀스는 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트(예: 오라클 시퀀스)
allocationSize를 만약 50으로 설정 할 경우 DB에는 sequence를 50으로 올려두고 메모리상에서는 1씩 증가하여 sequence를 불러오는 데이터베이스와의 통신을 줄여서 성능을 최적화할 수 있다. 50개를 다 쓸 경우 데이터베이스와의 통신을 통해 size만큼 DB의 sequence를 올려준다. 하지만 size를 너무 크게 할 경우 웹 서버가 꺼지면 중간에 빈 값이 발생할 수 있으므로 적절한 size를 선택하여야 한다.
'Spring' 카테고리의 다른 글
상속관계 매핑 (0) | 2023.03.21 |
---|---|
연관관계 매핑 (0) | 2023.03.20 |
영속성 컨텍스트의 이점 (0) | 2023.03.16 |
타임리프 문법 (0) | 2023.03.15 |
RedirectAttributes (0) | 2023.03.15 |