ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JPA] 4. 엔티티 매핑 - 1. 객체와 테이블 매핑 / 데이터베이스 스키마 자동 생성
    ComputerScience/JPA 2022. 6. 25. 22:40

    객체와 테이블 매핑

     

    엔티티 매핑에는 다음과 같은 매핑이 있습니다.

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

     

    우리는 이 중 객체와 테이블 매핑을 알아보도록 하겠습니다.

     

     

    @Entity

    • @Entity가 붙은 클래스는 JPA가 관리하고 이를 엔티티라고 합니다.
    • JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션 필수

     

    주의

    • 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자)
    • final 클래스, enum, interface, inner 클래스 사용X
    • 내가 디비에 저장하고 싶은 필드에는 저장할 필드에 final 사용

     

    @Entity 속성 정리

    • 속성: name
      • JPA에서 사용할 엔티티 이름을 지정합니다.
      • 기본값 : 클래스의 이름을 그대로 사용합니다.
      • 같은 클래스 이름이 없다면 가급적이면 기본값을 사용합니다.

     

    @Table 속성 정리

    • @Table은 엔티티와 매핑할 테이블 지정

    • name : 매핑할 테이블 이름을 지정합니다.
    • catalog : 데이터베이스 catalog를 매핑해줍니다.
    • schema : 데이터베이스 schema를 매핑해줍니다.
    • uniqueConstraints : DDL을 생성할 때 유니크 제약 조건을 생성해줍니다.

     


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

    이제 데이터베이스 스키마를 자동 생성하는 방법을 알아보겠습니다.

    • 해당 기능은 DDL(Data Definition Language)를 애플리케이션 실행 시점에 DB테이블을 자동 생성해주는 세팅입니다.
    • 객체만 생성해주면 알아서 테이블을 생성해주는 기능입니다.
    • 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL을 생성해줍니다.
    • 이렇게 생성된 DDL은 운영장비가 아니라 개발장비에서만 사용해야 합니다.
    • 생성된 DDL은 운영에서는 사용하지 않거나, 적절히 다듬은 후 사용합니다. 

    이 기능의 특이한 점은 

    꼭 개발에서만 써야함 . 운영에서 쓰면 안된다......

     

    속성

    hibernate.hbm2ddl.auto 

    • persistence.xml에 hibernate.hbm2ddl.auto 세팅을 넣어주고 DDL 생성을 사용할 수 있습니다.
    • value에 따른 옵션은 다음과 같습니다.

     

     

    • 해당 DDL 생성 기능은 위에 설명한 대로 데이터베이스 방언 별로 다르게 생성됩니다.

     

    유의사항

    • 운영 장비에는 절대 create, create-drop, update를 사용하면 안됩니다.
    • 개발 초기 단계에는 create 또는 update 정도만 사용해줍니다.
    • 테스트 서버에는 update 또는  validate 정도만 사용합니다.
    • 스테이징과 운영 서버에는 validate 또는 none 수준을 사용합니다.

     

    DDL 생성 기능 

    • 제약조건을 추가하여 DDL 생성 기능을 사용할 수 있습니다.
    • Column (unique = true, length = 10)
      • 이렇게 설정하면 DDL 생성 시, name varchar(10), primary key(id) 와 같이 세팅됩니다.
    • 이런 DDL 생성 기능은 DDL을 생성할 때만 영향을 주고 어플리케이션에는 영향을 주지 않습니다. 즉, JPA 실행 로직에는 영향을 주지 않습니다. DDL 생성에만 도움을 줍니다.

     

     

     

    댓글

Designed by Tistory.