엔티티 매핑

Moon·2022년 8월 16일
0
post-thumbnail

✨ 객체와 테이블 매핑

@Entity

@Entity가 붙은 클래스는 엔티티라고 하며 JPA가 관리한다.
JPA를 사용해서 테이블과 매핑할 클래스에는 해당 어노테이션을 꼭 붙여줘야 한다.

  • 기본 생성자는 필수
    - JPA를 구현해서 사용하는 라이브러리들이(ex.Reflection API..) 객체를 프록싱할 때 기본 생성자가 필요하기 때문이다.
  • final 클래스, enum, interface, inner 클래스에는 사용할 수 없다.
  • 저장할 필드에 final을 사용하면 안 된다.
    (reflection으로 생성된 프록시 객체의 필드를 초기화하려면 setter를 사용하는데 final필드는 setter를 이용한 초기화가 불가능하기 때문이다.)

@Table

@Table은 엔티티와 매핑할 테이블을 지정한다. 어노테이션을 따로 붙여주지 않으면 매핑한 엔티티 이름이 자동으로 테이블 이름이 된다.

✔️ DDL 생성 시에 유니크 제약 조건을 만든다.

데이터베이스 스키마 자동 생성

JPA는 클래스의 매핑 정보와 데이터베이스 방언을 사용해 데이터베이스 스키마를 자동으로 생성한다.

<property name="hibernate.hbm2ddl.auto" value="create" />

persistence.xml에 위와 같은 속성을 추가하면 애플리케이션 실해 시점에 데이터베이서 테이블을 자동으로 생성한다.

👉 이 때 생성된 DDL은 개발장비에서만 사용해야 한다. 운영 서버에는 사용하면 안 된다. (운영 환경에서 사용할 만큼 완벽하지 않기 때문에 필요한 경우에는 적절히 다듬어 사용한다.)

hibernate.hbm2ddl.auto 속성

옵션설명
create기존 테이블을 삭제하고 다시 생성 (DROP + CREATE)
create-dropcreate와 같으나 종료시점에 테이블 DROP (DROP + CREATE + DROP)
update변경분만 반영(운영DB에는 사용하면 안됨)
validate엔티티와 테이블이 정상 매핑되었는지만 확인
none사용하지 않음

❗운영 서버에서 create, create-drop, update처럼 ddl을 수정하는 옵션은 절대 사용하면 안 된다. 이 옵션들은 운영 중인 db의 테이블이나 컬럼을 삭제할 수 있기 때문이다.

  • 개발 초기 단계 : create 또는 update
  • 테스트 서버 : update 또는 validate
  • 스테이징과 운영 서버 : validate 또는 none

✨ 필드와 컬럼 매핑

JPA가 제공하는 필드와 컬럼 매핑용 어노테이션 - 필요할 떄 찾아보며 사용하면 된다.

어노테이션설명
@Column컬럼 매핑
@Temporal날짜 타입 매핑
@Enumeratedenum 타입 매핑
@LobBLOB, CLOB(대형데이터) 매핑
@Transient특정 필드를 컬럼에 매핑하지 않음(매핑 무시)

@Column

객체 필드를 테이블 컬럼에 매핑한다.

  • length - 문자 길이 제약 조건, String 타입에만 사용 , 기본값 = 255
  • nullable - null값의 허용 여부 설정 (false로 설정하면 DDL 생성시 not null 제약조건 붙음),
    기본값 = true

@Enumerated

자바 enum타입을 매핑할 때 사용한다.

  • EnumTytpe.STRING을 사용하는 것이 좋다. db에 문자로 저장되기 때문에 저장된 enum의 순서가 바뀌거나 enum이 추가되도 안전하다. (ORDINAL은 이미 저장된 enum의 순서를 변경할 수 없다.)

✨ 기본 키 매핑

@Id @GeneratedValue(strategey = GeneratrionType.AUTO)
private Long id;

직접할당 : @Id만 사용

자동 생성 (@GeneratedValue)

<전략>

  • IDENTITY : 기본 키 생성을 데이터베이스에 위임, MYSQL
  • SEQUENCE : 데이터베이스 시퀀스를 사용해서 기본 키 할당
  • TABLE : 키 생성 테이블 사용
  • AUTO : 데이터베이스 방언에 맞춰 위의 셋 중에 하나가 선택됨

참고 )
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 김영한님 강의
자바 ORM 표준 JPA 프로그래밍 (김영한)

profile
매일 성장하는 개발자 되기😊

2개의 댓글

comment-user-thumbnail
2022년 9월 23일

내배캠 수업 어떤가요? 만족하시나요?

1개의 답글