카테고리 없음
[JPA] 엔티티 매핑 (1) 객체와 테이블 매핑, DB 스키마 자동 생성
oilater
2023. 2. 15. 14:47
전에도 말했듯이, JPA 에서 가장 중요하게 알아야 할 것은
영속성 컨텍스트, JPA의 내부 동작 방식에 대한 매커니즘적 측면과
객체와 데이터베이스를 어떻게 매핑해서 사용하는지에 대한 실제 설게적인 측면이다.
오늘은 설계적인 측면인 엔티티 매핑에 대해서 알아보자!
- 객체와 테이블 매핑 : @Entity, @Table
- 필드와 컬럼 매핑 : @Column
- 기본 키 매핑 : @Id
- 연관관계 매핑 : @ManyToOne, @JoinColumn
1. 객체와 테이블 매핑
@Entity
@Entity가 붙은 클래스는 JPA가 관리하는 엔티티이다.
이게 붙지 않으면 그냥 내 마음대로 쓰고 싶은 클래스다.
JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수!
- 기본 생성자 필수! (파라미터가 없는 public 또는 protected 생성자)
- final 클래스, enum, interface, inner 클래스에는 사용 X
- DB에 저장할 필드에 final 사용 X - 당연한 것
@Entity 에는 name 이라는 속성이 있는데 크게 중요하지는 않다.
기본값은 클래스 이름을 그대로 사용한다.(예: Member)
안그러면 너무 헷갈리기 때문이다.
@Table
엔티티와 매핑할 테이블을 지정한다.
@Table(name = "MBR")
예를 들어 '회사의 규정이 우리 테이블 이름은 MBR 축약어로 쓰셔야 해요~' 라고 한다면 지정하면 된다.
이런 식으로 지정하면 쿼리가 insert into MBR ... 이런 형식으로 나간다.
이외에 catalog, schema 등의 속성도 있다.
데이터베이스 스키마 자동 생성
JPA는 에플리케이션 실행 시점에 스키마를 자동으로 생성하는 기능이 있다.
에플리케이션 로딩 시점에 create 문으로 DB를 생성하고 시작하는 것이다.
객체 생성하고 매핑을 다 해놓으면 알아서 생성해준다.
- 테이블 중심 -> 객체 중심
- 데이터 베이스 방언을 활용해서 데이터 베이스에 맞는 적절한 DDL을 생성한다.
- 이렇게 생성된 DDL은 개발 장비에서만 사용
- 생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬은 후 사용 권장
<property name="hibernate.hbm2ddl.auto" value="create" />
애플리케이션 로딩 시점에 Entity가 매핑된 애들은 다 Table을 만들어냄. 기존의 테이블은 먼저 지우고!
데이터베이스 스키마 자동 생성 속성
- create : 기존 테이블 삭제 후 다시 생성
- create-drop : create와 같으나 종료시점에 테이블 DROP
- update : 변경분만 반영(운영 DB에는 사용하면 안됨)
- validate : 엔티티와 테이블이 정상 매핑되었는지만 확인
- none : 사용하지 않음 (property 자체를 주석처리 해도 상관 없음.)
주의사항!!
- 운영 장비에는 절대 create, create-drop, update 사용하면 안된다.
- 개발 초기 단계는 create 또는 update
- 테스트 서버는 update 또는 validate (여러 명 개발자가 함께 사용하는 중간 서버) - create로 하면 데이터가 날라감!, 여기서도 가급적이면 쓰지 말 것.
- 스테이징과 운영 서버는 validate 또는 none
728x90
반응형
LIST