- 객체와 테이블 매핑
@Entity
클래스에 Entity 어노테이션이 붙게되면 그 클래스는 JPA가 관리하기 시작하며 엔티티로 등록된다. 또한 JPA를 사용하기 위해서는 필수적으로 등록해야 한다.
[주의점]
- 기본 생성자 필수 (파라미터가 없는 public 또는 protected 생성자)
- final, enum, interface, inner 사용 X
- 저장한 필드에 final 사용 X
@Entity(name = "ClassName")
JPA에서 사용할 속성 이름을 따로 지정해 줄 수 있다. 보통 클래스의 이름을 기본값으로 사용한다.
- 필드와 컬럼 매핑
@Column : 컬럼 매핑
@Temporal : 날짜 타입 매핑
@Enumerated : enum 타입 매핑
@Lob : BLOB, CLOB 매핑
@Transient : 특정 필드를 컬럼에 매핑하지 않음(매핑 무시) - 메모리에서만 사용
- 기본 키 매핑
기본키(Primary Key) 를 JPA에서는 두 가지 방식으로 관리한다.
@Id : 직접 ID 매핑
@GenerateValue : 자동으로 ID 매핑
- IDENTITY
기본 키 생성을 DB에 위임해준다.
MySQL의 auto_increment와 같으며 PostgreSQL, H2, SQL Server 등에서도 사용
DB에 INSERT SQL을 실행한 이후에 ID값을 식별 가능하다.
PK값을 식별해야하는 영속성컨텍스트 때문에 persist와 동시에 INSERT 쿼리가 나가게 된다. [ commit 을 하는 시점이 아닌 ] - SEQUENCE
데이터베이스 시퀀스는 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트 // Default = 1
오라클과 같은 DB에서 많이 사용한다.
persist 와 동시에 Sequence_name 으로부터 ID를 받아온다.
* allocationSize
시퀀스 매핑을 객체를 persist 할 때마다 call 하면 성능효율에 좋지 않다.
따라서 allocationSize 를 설정해주면 그 수만큼 메모리상에 미리 시퀀스 설정을 해주고, 다 사용하게 되면 다시
DB 시퀀스를 호출하는 방식이다.
또한 여러개의 서버가 동시에 호출하게 되더라도 allcoationSize 을 통해 [ 1~51, 52~100 ... ] 동시성 문제 또한 해결할 수 있다. - TABLE
키 생성 전용 테이블을 따로 생성한다.
모든 DB에 적용 가능하지만 또 다른 테이블을 활용한다는 점에서 성능이 좋지 않다.
I
- DB 스키마 자동생성
DDL(Database Definiton Language) 을 애플리케이션 실행 시점에 자동생성 해준다.
DB 방언을 활용하여 DB에 맞는 적절한 DDL을 생성하며 이러한 DDL은 개발장비에서만 사용되며
생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬은 후에 사용한다.
[ 운영장비 X ] - 실무에서 잘못 활용하면 큰일난다.
"hibernate.hbm2ddl.auto" value = "속성"
- create : 기존 테이블 삭제 후 다시 생성 (DROP + CREATE)
- create-drop : create와 같으나 종료시점에 테이블 DROP
개발 초기 단계에서만 사용 권장 - update : 변경분만 반영 (운영 DB에는 사용하면 안됨)
- validate : 엔티티와 테이블이 정상 매핑되었는지만 확인
- none : 사용하지 않음
'JPA with 김영한' 카테고리의 다른 글
다양한 연관관계 매핑 (0) | 2021.09.05 |
---|---|
연관관계 매핑 (0) | 2021.09.04 |
JPA와 영속성 컨텍스 (0) | 2021.08.30 |
JPA의 구동방식 (0) | 2021.08.25 |
변경 감지와 병합(merge) (0) | 2021.08.24 |