- 객체와 테이블 매핑 : @Entity, @Table
@Entity
@Table(name = "MBR")
public class Member {
@Entity가 붙은 클래스는 JPA가 관리하는 엔티티이며, JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수이다.
@Table은 엔티티와 매핑할 테이블을 지정하는 어노테이션이다 위의 코드와 같이 name을 지정할 수 있다.
@Entity의 default name은 클래스명과 같다.
주의
-기본 생성자 필수(public, protected)
-final클래스, enum, inteface, inner 클래스 사용 x
저장할 필드에 final 사용 x
- 필드와 컬럼 매핑 : @Column
- 기본 키 매핑 : @Id
- 연관관계 매핑 : @ManyToOne, @JoinColumn..
- - 데이터베이스 스키마 자동 생성
-DDL을 애플리케이션 실행 시점에 자동 생성
- 테이블 중심 -> 객체 중심
persistence.xmldp 다음과 같은 설정을 추가하면 DDL문이 자동으로 애플리케이션 실행 시점에 자동으로 들어가게 된다.
<property name="hibernate.hbm2ddl.auto" value="create" />
hibernate.hbm2ddl.auto
04. 엔티티 매핑
옵션 설명 | |
create | 기존테이블 삭제 후 다시 생성 (DROP + CREATE) |
create-drop | create와 같으나 종료시점에 테이블 DROP |
update | 변경분만 반영(운영DB에는 사용하면 안됨) |
validate | 엔티티와 테이블이 정상 매핑되었는지만 확인 |
none | 사용하지 않음 |
위와 같이 운영장비에는 절대 create, create-drop, update를 사용하면 안 된다. (DROP TABLE)
-개발 초기 단계는 create 또는 update
-테스트 서버는 update 또는 validate
-스테이징과 운영 서버는 validate 또는 none
DDL 생성 기능
제약조건 추가 : @Column(nullable = false, length = 10) null을 허용하지 않으며 10자 초과 x
유니크 제약조건 : @Column(unique = true)
DDL 생성 기능은 DDL을 자동 생성할 때만 사용되고, JPA의 실행 로직에는 영향을 주지 않는다.
필드와 컬럼 매핑
@Id
private Long id;
@Id
- PK를 매핑한 것이다
@Column(name = "name")
private String username;
@Column(name = "name")
- 객체는 username으로 사용하나, DB에서 컬럼명을 "name"으로 지정한 것이다.
@Enumerated(EnumType.STRING)
private RoleType roleType;
@Enumerated(EnumType.STRING)
- DB에는 열거 타입이 없으나, 위의 어노테이션을 사용하면 쓸 수 있다. (varchar로 매핑됨)
Enum타입은 Default가 ORDINAL로 되어있다.
STRING은 enum의 이름을 데이터베이스에 저장하고, ORDINAL은 enum 순서를 데이터 베이스에 저장하게 된다.
ORDINAL은 운영상에서 굉장히 위험하여 사용을 하면 안 되고 STRING만 사용해야 한다.
@Lob
private String description;
@Lob
varchar를 넘어서는 굉장히 큰 컨텐츠를 넣을 때 사용한다.
기본 키 매핑
- 기본 키 매핑 어노테이션
- @Id(직접 할당)
- @GeneratedValue(자동 생성)
위의 코드를 보면 Id를 PK로 지정하였으나 값을 넣지 않고 username만 "CA"로 넣어주었다.
values를 보면 id는 null로 들어가게 된 것을 볼 수 있는데, 아래 DB 결과와 같이 자동으로 ID의 값이 넣어진 걸 볼 수 있다.
- 권장하는 식별자 전략
- 기본키 제약 조건 : Notnull, 유일, 변하면 안 된다.
- 미래까지 이 조건을 만족하는 자연 키는 찾기 어렵다. 대체키를 사용하자.
- 예를 들어 주민등록번호도 키로 적절하지 않다.
- 권장 : Long형 + 대체키 + 키 생성 전략 사용
- IDENTITY 전략 - 특징
- 기본 키 생성을 데이터베이스에 위임
- 주로 MySQL, PostgreSQL 등 에서 사용 (AUTO_INCREAMENT)
- AUTO_INCREAMENT는 데이터베이스에 insert 쿼리를 실행 한 이후에 ID값을 알 수 있다.
- IDENTITY 전략은 em.persist() 시점에 즉시 inser sql을 실행하고 DB에서 식별자를 조회한다. (IDENTITY 전략에서만)
출처 : https://www.inflearn.com/course/ORM-JPA-Basic#
'JPA' 카테고리의 다른 글
다양한 연관관계 매핑 (0) | 2021.10.09 |
---|---|
연관관계 매핑 (0) | 2021.10.08 |
flush, 준영속 상태 (0) | 2021.10.06 |
영속성 컨텍스트, 1차캐시, 변경감지 (0) | 2021.10.05 |
ORM-JPA (0) | 2021.10.05 |