애정코딩 💻

WEB/JPA 2021.05.13 댓글 0 Joana

3. 자바 ORM 표준 JPA 프로그래밍 - 엔티티 매핑

객체와 테이블 매핑

@Entity

- @Entity가 정의되어있는 클래스는 JPA가 관리한다.

- 기본 생성자가 꼭 있어야 한다.

- 속성: name ->JPA에 사용할 엔티티 이름을 지정한다, 기본값 : 클래스 이름을 그대로 사용

 

@Table

- name, catalog, schema 등등. . 

 

필드와 컬럼 매핑

@Column

데이터베이스 컬럼명을 설정해줄 수 있다.

unique(실무에서 잘 사용하지 않는다 -> 유니크 제약조건 이름을 설정할 수 없다 대신 @Table(uniqueCons.. 사용), length 등 설정할 수 있다. 

JPA 기본 - 김영한 / 인프런

@Temporal

날짜 타입 매핑

하지만 LocalDate, LocalDateTime을 사용할 때는 생략 가능하다. 

 

@Enumerated

enum 타입 매핑

default가 ORDINAL 인데 enum 순서를 데이터베이스에 저장한다 ( 사용X -> 순서가 변경되어도 이전 데이터는 변경이 안되어서 문제 발생 )

EnumType.STRING 은 enum 이름을 데이터베이스에 저장한다 (이것을 사용)

 

@Lob

BLOB, CLOB 매핑

 

 

@Transient

특정 필드를 컬럼에 매핑하지 않음 (매핑 무시)

메모리상 로직에만 사용하고 싶을때 사용한다.

 

기본 키 매핑

@Id

- 직접 할당할 경우 @Id 

- 자동 생성시 (@GeneratedValue) 추가한다.

- strategy = GenerationType.AUTO  - 방언에 따라 자동 지정, 기본값

- strategy = GenerationType.IDENTITY - 기본 키 생성을 데이터베이스에 위임한다. (MYSQL)

 DB에 insert를 해봐야 id값을 알 수 없다. 그래서 예외적으로 persist 할 때 바로 쿼리를 날린다. ( 원래는 트랜젝션시에 쿼리가 날라감 ) -> id 값 알 수 있음

- strategy = GenerationType.SEQUENCE - 데이터베이스 스퀀스 오브젝트 사용 @SequenceGenerator 필요 (ORACLE)

- strategy = GenerationType.TABLE - 키 생성용 테이블 사용 @TableGenerator 필요 (모든 DB) -> 성능이 별로...

 

-> 권장하는 식별자 전략 

- 기본 키 제약 조건 : null X, 유일, 변하면 안된다.

- 미래까지 이 조건을 만족하는 자연키는 찾기 어렵기 때문에 대리키(대체키)를 사용한다.

   예를 들어 주민등록번호도 기본 키로 적절하지 않다. 

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

   때에 따라 랜덤값, UUID 를 권장

 

연관관계 매핑 : @ManyToONe, @JoinColumm 등

 

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

DDL을 애플리케이션 실행 시점에 자동 생성

테이블 중심에서 -> 객체 중심으로

데이터 베이스 방언을 활용하여 적절하게 DDL을 생성한다

이렇게 생성된 DDL은 개발서버에서만 사용하고 적절하게 다듬어서 운영에서 사용하자.

 

create > 기존 데이터 삭제 후 다시 생성

create-drop > 기존 데이터 삭제 후 다시 생성 애플리케이션 종료시 테이블 삭제

update > 변경된 부분만 수정 (alter) , 추가하는것 만 가능

validate  > 엔티티와 테이블이 정상매핑되었는지 확인해준다.

none > 사용하지 않음

 

운영 장비에는 절대 create, create-drop, update 사용하면 안된다.

개발 초기 -> create or update

테스트 서버 -> update or validate

스테이징과 운영 서버 -> validate or none

 

--> 로컬PC 외에는 none or validate 만 사용하고 테이블 수정은 직접한다.

 

 

 

반응형