23 Jun 2020

spring boot jpa - 엔티티 매핑

JPA의 엔티티 매핑


@Entity

  • @Entity가 붙은 클래스는 JPA가 관리

  • JPA를 사용해서 테이블과 매핑할 클래슨는 @Entity필수

주의!!
기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자)
final 클래스, enum, interface, inner 클래스 사용 X
저장할 필드에 final 사용 X

속성 : name (별로 사용할일 없음 왠만하면 기본값쓰자 햇갈리니까!!!!)

  • JPA에서 사용할 엔티티 이름을 지정한다

  • 기본값: 클래스이름을 그대로 사용

  • 같은 클래스 이름이 없으면 가급적 기본값을 사용한다!!!!!!


데이터베이스 스키마 자동 생성 - 주의

  • 운영장비에는 절대 create, create-drop, update 사용하면 안됨!!!!

  • 개발 초기 단계는 create 또는 update

  • 테스트 서버는 update 또는 validate

  • 스테이징과 운영 서버는 validate 또는 none


기본 키 매핑

@Id @GeneratedValue

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;


IDENTITY 전략(GenerationType.IDENTITY)

  • 기본 키 생성을 데이터베이스에 위임

  • 주로 MYSQL, PostgreSQL, SQL Server, DB2에서 사용

  • JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL 실행

  • AUTO_INCREMENT는 데이터베이스에 INSERT SQL을 실행한 이후 ID값을 알 수 있다!!! <- 중요

  • IDENTITY 전략은 em.persist()시점에 즉시 ISNERT SQL실행하고 DB에서 식별자를 조회한다.


TABLE 전략 (현업에서 잘 사용 안함!)

  • 키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀸스를 흉내냄

  • 장점 : 모든 데이터베이스에 적용가능

  • 단점 : 성능


권장하는 식별자 전략

  • 기본키 제약 조건 : not null, 유일, 변하면 안됨

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

  • 주민등록번호는 기본 키로 적절하지 않다.

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


Tags:
0 comments