✏️ Entity Mapping (1)

박상민·2023년 9월 29일
0

JPA

목록 보기
7/24
post-thumbnail

JPA에서 제일 중요하게 봐야 되는 2가지가 있다.

  • 매커니즘적인 측면
    영속성 컨텍스트나 어떤 JPA의 내부 동작 방식과 같은 JPA가 내부적으로 어떤 매커니으로 동작하는지
  • 정적인 측면
    실제 설계적인 측면, 객체랑 관계형 데이터베이스를 어떻게 맵핑해서 쓰는지

이번 글에서는 맵핑에 관한 Entity Mapping에 대해서 작성하겠다.

목차

  • 객체와 테이블 매핑
  • 데이터베이스 스키마 자동 생성
  • 필드와 컬럼 매핑 -> 다음 글
  • 기본 키 매핑 -> 다음 글

⭐️ Entity Mapping

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

📌 객체와 테이블 매핑

✔︎ @Entuty

@Entity

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

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

  • 주의

  • 기본 생성자 필수 (파라미터가 없는 public 또는 protected 생성자)

  • final 클래스, enum, interface, inner 클래스 사용 X

  • 저장할 필드에 final 사용 X

@Entity 속성 정리

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

@Entity(name="MBR")

name을 MBR로 설정했다. from 절을 보면 MBR이라고 되어 있는 것을 확인할 수 있다.

✔︎ @Table

@Table

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

  • 속성기능기본값
    name매핑할 테이블 이름엔티티 이름을 사용
    catalog데이터베이스 catalog 매핑
    schema데이터베이스 schema 매핑
    uniqueConstraintsDDL 생성 시에 유니크 제약 조건 생성
    • 테이블 명을 꾸고 싶다면 name 속성을 사용하면 되고, 이외에도 catalog, schema 속성 등이 있다.

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

JPA는 맵핑 정보만 보면 어떤 쿼리를 만드렁야할지 어떤 테이블인지 다 알 수 있다. 그래서 JPA에서는 아예 애플리케이션 로딩 시점에 DB 테이블을 생성하는 기능도 지원을 한다.

물론 운영에서 사용하며 안된다. 개발 단계나 로컬 pc에서 개발할 때 사용하면 된다.

pom.xml

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

xml에 위에 코드를 추가하면 애플리케이션 실행 시점에 JPA가 테이블을 생성해준다.

  • 옵션설명
    create기존 테이블 삭제 후 다시 생성
    create-dropcreate와 같으나 종료 시점에 테이블 Drop
    update변경분만 반영(운영 DB에는 사용X)
    validate엔티티와 테이블이 정상 매핑되었는지만 확인
    none사용하지 않음

장점
보통 개발할 때 테이블을 먼저 만들어놓고 그 다으멩 객체에 돌아가서 개발을 한다. 하지만 JPA는 그럴 필요가 없다. 객체에서 맵핑을 해두면 알아서 테이블을 만들어준다.

이때 데이터베이스 방언을 활용해서 각 데이터베이스에 맞는 적절한 DDL을 생성해준다.

예시

@Entity //jpa가 로딩될 때 인식을 함, JPA가 관리하는 객체가 되고 데이터베이스 테이블과 맵핑을 해서 사용함
public class Member {
    @Id //pk가 무엇인지 알려줌, pk 매핑
    private Long id;
    
    private String username;

    public Member() {
    }

    // Getter, Setter ...

위의 설정을 한 후 Member Entity를 작성 후 실행하면 데이터베이스에 JPA가 자동으로 테이블을 생성해준다.

✔︎ DDL 생성 기능

  • 제약조건 추가: 회원 이름은 필수, 10자 초과X

    • EX) @Column(nullable = false, length = 10)
  • 유니크 제약조건 추가

    • @Table(uniqueConstraints = {@UniqueConstraint( name = "NAME_AGE_UNIQUE",columnNames = {"NAME", "AGE"} )})
  • DDL 생성 기능은 DDL을 자동 생성할 때만 사용되고 JPA의 실행 로직에는 영향을 주지 않는다.


출처
자바 ORM 표준 JPA 프로그래밍 강의

profile
스프링 백엔드를 공부중인 대학생입니다!

0개의 댓글