엔티티 매핑

강한친구·2022년 7월 4일
0

JPA

목록 보기
6/27

매핑 소개

객체와 테이블 매핑 : @Entity @Table

이는 JPA가 인식하기 위한 어노테이션이다.

DB 스키마 자동 생성

DDL을 어플리캐이션 실행 시점에 자동 생성한다.
데이터베이스 방언을 활용해서 데이터배이스에 적절한 DDL을 작성해준다.
하지만 이렇게 생성된 DDL은 운영단계에서는 사용하지 않고, 조금 개선해서 사용하는편이다.

운영장비에는 create, create-drop, update 절대 안된다

개발초기에는 로컬서버라서 상관이 없다

테스트 서버는 update, validate를 써야한다. drop을 쓰면 다 지워지기때문이다. 가능하면 validate를 쓴다.

스테이징과 운영서버는 validate를 쓰거나 아예 쓰면 안된다.

필드와 컬럼 매핑 : @Column

제약조건을 추가할 수 있다.

@Column(nullable = false, length = 10)
@Table(uniqueConstraints = {@UniqueConstraint( name = "NAME_AGE_UNIQUE",
 columnNames = {"NAME", "AGE"} )}) 

혹은 이름을 줄 수 있다.

@Column(name = "name")
private STring userName;

이러면 name을 가진 생성자가 생긴다.

또는, Type을 설정해줄 수 있다.

예시

@Column 컬럼 매핑
@Temporal 날짜 타입 매핑
@Enumerated enum 타입 매핑
@Lob BLOB, CLOB 매핑
@Transient 특정 필드를 컬럼에 매핑하지 않음(매핑 무시)

기본 키 매핑 : @Id, @GeneratedValue

직접 할당할 경우 @Id를 쓰고, @GeneratedValue를 쓰면 Auto_Increment처럼 자동할당으로 처리해준다.

권장하는 식별자 전략

기본 키 제약 조건 : not null, 유일, 변하면 안된다.
하지만 이를 만족하는 자연키를 찾기는 어렵다. 따라서 대리키, 대체키를 사용하는것이 좋다.

권장 : long형 + 대체키 + 키 생성 전략 사용

데이터 중심 설계의 문제점

지금까지 배운데로 모델을 만들어보면, 객체지향적이기보단 DB지향적인것을 알 수 있다.
외래키가 객체에 그대로 들어오고, UML도 망가지게 된다. 따라서 연관관계 매핑으로 객체지향적 설계를 해야한다.

0개의 댓글