[ORM] 엔티티 매핑

2025. 1. 27. 18:48

☑️ 객체와 테이블 매핑

  • @Entity
    • JPA가 관리하는 객체임을 나태낸다
    • Java 객체와 DB 테이블 간의 매핑 규칙을 정의한 클래스
    • 기본생성자를 반드시 가져야 한다 @NoArgsConstructor(access = AccessLevel.레벨)
    • final 필드는 사용할 수 없다
  • @Table
    • 엔티티와 매핑할 테이블 지정
    • 어노테이션 생략 시 엔티티 클래스 이름이 테이블 이름으로 사용된다

☑️ 필드와 컬럼 매핑

  • @Column
    • 필드와 컬럼을 매핑
    • 속성
      • name : 필드와 매핑할 컬럼이름
      • insertable, updatable : 등록, 변경 여부(기본 값은 True로 설정되어있음)
      • nullable : null 허용여부 → flase 일 경우 Not Null 제약 조건이 붙는다
      • unique : 컬럼에 간단히 유니크 제약조건을 걸 때 사용
        • 운영 단계에서 사용하지 않는다
        • 제약조건명이 랜덤으로 생성되어 이름을 보고 확인할 수 없음
      • columnDefinition : 데이터 베이스 컬럼조건을 직접 줄 수 있음
      • length : 문자길이 제약조건
      • precision : 숫자의 전체 자릿수(소수점 포함) → BigDecimal 타입에서 사용
      • scale : 소수점 이하 자릿수 → BigDecimal 타입에서 사용
  • @Temporal
    • 날짜 매핑 시 사용
    • 자바 8 이후 생략 가능
    • 자바 8은 LocalDate 와 LocalDateTime 제공
  • @Enumerated
    • enum 타입 매핑 시 사용
    • @Enumerated(EnumType.STRING) 타입만 사용 ORDINARY는 실무에서 사용x
      • STRING 전략은 Enum 타입의 값을 저장
      • ORDINARY 전력은 순서 값을 저장
      • 이미 저장된 enum의 순서 값은 바꿀 수 없다 따라서 Enum 안의 값의 순서가 바뀌면 문제가 발생
  • @Lob
    • 옵션이 따로 없고, 가변길이를 갖는 큰 데이터 저장 시 사용
  • @Transient
    • 필드를 매핑하고 싶지 않을 때 사용
    • DB에 반영되지 않는다

☑️ 기본 키 매핑

  • @Id
  • @GeneratedValue(strategy = GenerationType.전략)
    • @Id 와 @GeneratedValue를 사용하여 기본키를 매핑할 수 있다
    • @Id, @GeneratedValue 어노테이션은 Jakarta.persistence 사용
    • Id는 Long 타입으로 선언
    • 생성 전략을 사용하지 않고 Id만 사용시 값을 직접 세팅해야함
    • 기본 키 생성 전략
      • IDENTITY : 기본 키 생성을 DB에 위임
      • SEQUENCE : DB SEQUENCE 객체를 사용하여 DB가 자동으로 기본 키 생성
      • TABLE : SEQUENCE와 유사하나 성능 이슈가 존재함
      • AUTO : 3가지 전략중 선택

☑️ 추가 참고

  1. 유니크 제약 조건
    1. 테이블 열에 중복된 값을 허용하지 않는다
    2. NULL 값 허용 단, NULL 값은 중복으로 간주하지 않는다
  2. BigDecimal 타입
    1. 부동 소수점 타입은 근사치를 보여주므로 오차가 발생한다
    2. BigDecimal 타입은 계산의 오차가 없다
    3. 불변객체이다. 따라서 값 변경 시 새로운 객체로 갈아끼워야 한다
  3. @Transactional
    1. Springframwork 에서 제공하는 어노테이션으로 사용
    2. Spring에서 제공하는 기능 중 하나로 해당 어노테이션을 붙이면 해당 메소드 내의 모든 DB 접근 작업이
      하나의 트랜잭션을 묶인게 된다.
      이것은 작업의 일관성을 보장하고, 트랜잭션 내에서 실행되는 모든 쿼리가 성공해야만
      커밋(저장)되고 하나라도 실패하면 롤백(취소)되는 것을 의미한다

'Spring > ORM' 카테고리의 다른 글

[ORM] JPA 란?  (0) 2025.01.13

BELATED ARTICLES

more