오봉이와 함께하는 개발 블로그
JPA - 객체와 테이블 매핑, DB 스키마 자동 생성 본문
객체와 테이블 매핑
JPA에서 객체와 테이블을 매핑해야 한다.
총 4개의 매핑을 해야 하는데 아래와 같이 나뉜다.
엔티티 매핑
- 객체와 테이블 매핑
- @Entity
- @Table
- 필드와 컬럼 매핑
- @Column
- 기본 키 매핑
- @Id
- 연관관계 매핑
- @ManyToOne
- @JoinColumn
@Entity
@Entity가 붙은 클래스는 JPA가 관리하고 엔티티라 한다.
그래서 JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션이 필수로 붙어야 한다.
주의사항
파라미터가 없는 public 혹은 protected 생성자는 꼭 있어야 한다.
이는 JPA가 다양한 기술을 사용하기 때문이다.
또, final 클래스나 enum, interface, inner 클래스는 사용할 수 없다.
마지막으로 DB에 저장할 필드에는 final을 사용할 수 없다.
속성
name 속성이 있는데 해당 속성을 통해 JPA에서 사용할 엔티티 이름을 지정한다.
기본값은 클래스 이름을 그대로 사용하며 같은 클래스 이름이 없다면 가급적 기본값 사용을 권장한다.
@Table
@Table은 엔티티와 매핑할 테이블을 지정한다.
name 속성을 통해 매핑할 테이블 이름을 정할 수 있다.
- @Table(name = "XXX")
DB마다 다르기 때문에 catalog속성과 schema속성을 통해 해당 속성과 관련된 매핑할 수 있다.
또, uniqueConstraints속성을 통해 DDL 생성 시 유니크 제약 조건을 생성할 수 있다.
DB 스키마 자동 생성
JPA는 매핑 정보를 보면 어떤 쿼리를 만들지, 어떤 테이블인지 알 수 있기 때문에 JPA는 애플리케이션 로딩 시점에 DB 테이블을 생성하는 기능을 지원한다.
물론 운영할 때 사용하면 안 된다.
개발할 때 도움을 주는 기능이기 때문에 개발할 때 적절하게 다듬고 사용하거나 그냥 사용한다.
DB 스키마 자동 생성 - 속성
hibernate.hbm2ddl.auto
- create : 기존 테이블 삭제 후 다시 생성(DROP + CREATE)
- create-drop : create와 같으나 종료시점에 테이블 DROP
- update : 변경분만 반영(운영 DB에는 사용하면 안됨)
- validate : 엔티티와 테이블이 정상 매핑되었는지만 확인
- none : 사용하지 않음
주의사항
운영 장비에서는 절대 create, create-drop, update 사용하면 안된다.
개발 초기 단계는 create 또는 update을 권장.
테스트 서버는 update 또는 validate을 권장.
스테이징과 운영 서버는 validate 또는 none을 권장.
하지만 장애가 날 확률이 있기 때문에 로컬에서 개발할 때나 사용하고 다른 환경에서는 가급적 사용하지 않고 직접 스크립트 작성할 것을 권장한다.
DDL 생성 기능
JPA의 실행 메커니즘에 영향을 주는 것이 아니고 단지 DDL이 자동 생성되고 실행되는 것이다.
제약조건 추가
컬럼에 제약조건을 추가할 수 있다.
- @Column(unique=true, length=30)
출처 : 인프런 김영한 지식공유자님의 스프링 부트와 JPA 실무 완전 정복 로드맵 강의
'BE > JPA' 카테고리의 다른 글
JPA - 실전 예제 1 - 요구사항 분석과 기본 매핑 (0) | 2022.06.24 |
---|---|
JPA - 필드와 컬럼 매핑, 기본 키 매핑 (0) | 2022.06.24 |
JPA - 플러시, 준영속 상태 (0) | 2022.06.23 |
JPA - 영속성 컨텍스트 (0) | 2022.06.23 |
JPA - 세팅, JPA&JPQL 개요 (0) | 2022.06.21 |