[SpringBoot] 2. 엔티티 매핑 (OneToOne, OneToMany, ManyToOne)

예돌이·2023년 10월 10일
0

Spring

목록 보기
3/3

<학습목표>
관계형데이터베이스와 매핑되는 객체인 엔티티의 매핑에 대해서 공부해보자

1. 단일 엔티티 매핑

: JPA는 엔티티 객체를 생성할 때, 기본 생성자(Default Constructor)를 사용한다

@Entity
@Table(name="member")
class Member{
	...
}
  • @Entity
    해당 클래스를 Entity로 만드는 어노테이션

    • 속성
      • Name : JPA에서 사용할 엔티티 이름을 지정한다
    • 주의사항
      • final 클래스, enum, interface, inner class에는 사용 불가
      • 저장할 필드에 final 사용 불가
  • @Table
    엔티티와 매핑할 테이블을 지정하는 어노테이션
    Table 어노테이션을 생략할 시에 엔티티 이름을 테이블 이름으로 사용한다

    • 속성
      • Name: 엔티티와 매핑할 테이블 이름 (default. 엔티티 이름을 사용)
      • uniqueConstraints: DDL 생성이 유니크 제약조건을 만듬.
  • 데이터베이스 스키마 자동 생성

경로: src/resources/application.yml

	spring:
      h2:
        console:
          enabled: true //데이터베이스 콘솔 활성화
      jpa:
        generated-ddl: true
        database: H2
        show-sql: true
        open-in-view: false
        properties:
          hibernate:
            dialect: org.hibernate.dialect.H2Dialect
            query.in_clause_parameter_padding: true
            hbm2ddl: //데이터 베이스 스키마 DDL을 db로 검증하고 내보내는 프로퍼티
              auto: create-drop
  • AUTO DDL 옵션
    create 기존 테이블을 삭제하고 새로운 테이블을 생성 (drop+create)
    create-drop 어플리케이션 종료시 생성한 DDL 제거 (drop+create+drop)
    update 테이블, 엔티티 매핑정보를 비교하여 변경사항을 수정
    validate 테이블, 엔티티 매핑정보를 비교하여 차이가 있으면 경도를 남겨 어플리케이션을 실행하지 않는다
  • DDL 옵션
    @Entity
    @Table(name="member")
    class Member{
        @id
        @GeneratedValue(strategy = GenerationType.SEQUENCE)
        private Long id;

        @Colume(nullabe=false, length=30, unique=true)
        private String nickName;
    }
  • 키본키 매핑 전략

    • @id

      • name: JPA에서 사용할 엔티티 이름을 지정
    • @GeneratedValue

      • SEQUENCE: 데이터베이스 시퀀스에서 식별자 값을 획득한 후 영속화 (H2, DB2)
      • IDENETITY: 데이터베이스 엔티티를 저장해서 식별자값을 획득한 후 영속화 (MySQL)
      • AUTO: 데이터베이스 언어에 따라서 자동으로 전략을 선택

2. 연관관계 매핑

자바는 객체지향 언어여서, 객체들은 참조값(주소)를 통해 연관관계를 맺는다.
그러나 RDB의 테이블들은 외래키로 연관관계를 맺기 때문에
서로 연관관계를 맺는 방식이 달라 JPA를 통해 객체매핑과 테이블 매핑을 연결해 주는것이다.

  • 방향
    • 회원 → 주문, 주문 → 회원과 같이 한쪽이 한쪽만 참조하는 것을 단방향 관계라고 한다.
    • 회원 → 주문, 주문 → 회원과 같이 양쪽 모두 서로 참조하는 것을 양방향 관계라고 한다.
    • 테이블에서의 관계는 항상 양방향이다
  • 다중성 (일대다, 다대일, 다대다)
    • 회원은 주문 여러개를 할 수 있기 때문에, 회원(1)과 주문(N)은 일대다(1:N)관계이다.
    • 주문은 여러 회원에 의해 발생될 수 있기 때문에, 주문(N)과 회원(1)은 다대일(N:1)관계이다.
  • 연관관계 주인(mappedBy)
    • 객체를 양방향 연관관계로 만들면, 연관관계의 주인을 정해야한다.
    • 연관관계의 주인만이, 외래키를 등록 수정 삭제 할 수있다. (주인이 아닌쪽은 읽기만 가능)
    • 테이블 중 FK가 있는 족이 연관관계 주인이 된다.
    • 1:N관계에서 N쪽이 연관관계 주인이 된다.
      단방향 매핑 예시
      class Member{
          private long id;
      }
      Class Order{
          private long id;
          private Member member; // 주문->회원
      }

      양방향 매핑 예시
      class Member{
          private long id;
          prvate List<Order> orders; // 회원->주문 
      }
      Class Order{
          private long id;
          private Member member; // 주문->회원
      }

이 포스팅은 프로그래머스 강의를 듣고 혼자 공부하는 끄적임노트입니다 :)
다음편은..언젠가...투비컨티뉴우.......!!!!

0개의 댓글

관련 채용 정보