본문 바로가기

Programming/JPA

[JPA] 엔티티 매핑

반응형

엔티티 매핑 소개

  • 객체와 테이블 매핑: @Entity, @Table
  • 필드와 컬럼 매핑: @Column
  • 기본 키 매핑: @Id
  • 연관관계 매핑: @ManyToOne, @JoinColumn

객체와 테이블 매핑 - @Entity

@Entity가 붙은 클래스는 JPA가 관리하는 엔티티 입니다. JPA를 사용해서 테이블과 매핑되는 클래스에 @Entity 어노테이션이 필수로 사용되어야 합니다.

  • 기본 생성자는 필수입니다.(파라미터가 없는 public또는 protected 생성자)
  • final 클래스, enum, interface, inner 클래스에 사용할 수 없습니다.
  • 저장할 필드에 final 사용하면 안됩니다.

@Entity 에는 name 속성이 있습니다. JPA에서 사용할 엔티티 이름을 지정하는데 사용됩니다. 속성 지정 없이 어노테이션만 사용하면 기본값이 적용되고, 클래스 이름을 사용합니다.

 

 

객체와 테이블 매핑 - @Table

엔티티와 매핑할 테이블을 지정합니다.

 

 

@Table의 모든 속성은 optional 입니다.

  • name: 매핑할 테이블 이름. 기본값은 엔티티 이름을 사용합니다.
  • catalog: 데이터베이스 catalog 매핑.
  • schema: 데이터베이스 schema 매핑.
  • UniqueConstraint: DDL 생성 시 유니크 제약 조건 생성.
  • Indexes: 데이터베이스 테이블 인덱스 관련.

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

데이터베이스 스키마 자동 생성의 이점은 다음과 같습니다.

  • DDL을 애플리케이션 로딩(실행) 시점에 자동으로 생성합니다. 이 기능을 통해 개발자는 개발 작업 시 SQL 구문을 통한 DB 구축 작업 -> 객체 구성 작업으로 이어지는 기존의 개발 과정에서 벗어날 수 있습니다. 즉 테이블 중심에서 객체 중심의 개발이 가능합니다. 객체 매핑만 해놓으면 애플리케이션 실행 시점에서 JPA가 자동으로 생성 구문을 만들어서 실행하기 때문입니다.
  • 데이터베이스 방언(dialect)을 활용해서 데이터베이스에 맞는 적절한 DDL을 생성합니다. Oracle, MySQL 등 다양한 데이터베이스 유형의 문법에 맞는 적절한 쿼리문을 자동으로 생성합니다. 생성된 DDL은 운영서버가 아니라 개발에서만 사용하거나, 적절히 다듬은 후에 사용해야 합니다.

해당 기능을 사용하려면 우선 JPA설정을 담당하는 persistence.xml 파일에 설정을 추가해야 합니다.

<property name="hibernate.hbm2ddl.auto" value="create" />

value값을 무엇으로 하느냐에 따라서 다양한 동작을 합니다.
value값에 들어가는 속성의 종류는 다음과 같습니다.

  • create: 기존 테이블을 삭제 후 다시 생성한다.(DROP -> CREATE)
  • create-drop: create와 같으나 종료 시점에 테이블을 DROP 한다.
    • 로컬 환경에서 테스트 작업 시 테스트 분기마다 DB를 초기화 할 때 사용하면 유용한 옵션.
  • update: 변경분만 반영(운영 DB에는 사용하면 안된다)
    • create, create-drop과는 다르게 테이블 초기화를 하지 않는다. 대신 변경이 발생하면 alter 쿼리를 통해 변경 내용을 반영한다.
    • 주의할 점은, 이 속성 사용 시 추가 작업의 변경만 감지해서 반영한다. 컬럼이 삭제되거나 하는 삭제 작업에 대한 변경은 감지하지 않는다.
  • validate: 엔티티와 테이블이 정상 매핑되었는지만 확인한다.
    • DB에 존재하지 않는 컬럼에 대한 매핑 요청 등이 왔을 때 경고 문구를 출력한다.
  • none: 사용하지 않는다.

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

  • 운영 장비에는 절대 create, create-drop, update를 사용하면 안된다. - important
  • 개발 초기 단계에는 create 또는 update
  • 테스트 서버는 update 또는 validate
  • 스테이징과 운영 서버는 validate 또는 none

참고

반응형

'Programming > JPA' 카테고리의 다른 글

[JPA] 기본 키 매핑  (0) 2022.04.30
[JPA] 필드와 컬럼 매핑  (0) 2022.04.30
[JPA] 영속성 컨텍스트  (0) 2022.04.30
[JPA] JPA 시작!  (0) 2022.04.30
[JPA] Part.02_Hibernate를 활용한 JPA 사용(CRUD 연습)  (0) 2021.08.09