엔티티 매핑

엔티티 매핑

객체와 테이블 매핑 : @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문이 자동으로 애플리케이션 실행 시점에 자동으로 들어가게 된다.

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의 값이 넣어진 걸 볼 수 있다.

DB

권장하는 식별자 전략

- 기본키 제약 조건 : 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#

from http://dobi852.tistory.com/24 by ccl(A) rewrite - 2021-10-07 02:01:22