내일배움캠프 Spring 50일차(수) TIL

Skadi·2024년 3월 6일
0

1. Raw JPA

1-1 Raw JPA 테이블 매핑 기능

@Entity

  • 객체 관점에서의 이름
  • 디폴트로 클래스명으로 설정됨
  • 엔티티의 이름은 JQL에서 쓰임
    • JQL : Entity 명으로 쿼리짤때 쓰이는 언어 (ex. JPQL, QueryDsl)

@Table

  • RDB 의 테이블 이름
  • @Entity의 이름이 테이블의 기본값.
    • 주로 Entity 이름과 다르게 Table 명을 지정하고 싶을때 아래와 같이 사용
  • 테이블의 이름은 SQL에서 쓰임
    • SQL : Table 명으로 쿼리짤때 쓰이는 언어 (ex. JDBC, SQL Mapper)

@Id

  • 엔티티의 주키를 맵핑할 때 사용.
  • 자바의 모든 primitive 타입과 그 랩퍼 타입을 사용할 수 있음
    • Date랑 BigDecimal, BigInteger도 사용 가능.

@GeneratedValue

  • 주키의 생성 방법을 맵핑하는 애노테이션
  • 생성 전략과 생성기를 설정할 수 있다.
    • 기본 전략은 AUTO: 사용하는 DB에 따라 적절한 전략 선택
    • TABLE, SEQUENCE, IDENTITY 중 하나. - (MYSQL AI = IDENTITY)

@Column

  • unique, nullable, length, columnDefinition 등등...

@Temporal

  • JPA에서 java.util.Date나 java.util.Calender 타입의 필드를 DB의 날짜 및 시간 타입으로 맵핑할 때 사용하는 어노테이션
  • 엔티티의 필드가 데이터베이스의 어떤 날짜/시간 타입(DATE, TIME, TIMESTAMP)과 매핑될 것인지를 명시적으로 지정
  • 다만 JPA 2.2부터는 java.time.LocalDate, java.time.LocalTime, java.time.LocalDateTime 등의 Java 8 날짜/시간 API를 직접 지원하기 때문에, 이 경우 @Temporal을 사용할 필요가 없습니다.

@Transient

  • 엔티티의 특정 필드를 데이터베이스의 컬럼에 맵핑하지 않고 싶을 때 사용하는 어노테이션입니다.
  • 이 어노테이션이 붙은 필드는 JPA가 데이터베이스와의 CRUD 작업 시 무시하며, 따라서 데이터베이스 테이블에 해당 필드에 대응하는 컬럼이 생성되지 않습니다.
  • 주로 엔티티 내에서 임시로 사용하고 싶은 정보나 계산된 값 등을 저장하는 필드에 사용합니다.
  • 엔티티가 영속화될 때 무시되기 때문에, 데이터베이스에는 영향을 주지 않습니다.

1-2 Raw JPA 필드 타입 매핑 기능

  • 기본타입
    • @Column
      • String, Date, Boolean, 과 같은 타입들에 공통으로 사이즈를 제한할 용도로 쓰인다.
      • Class 에 @Entity 가 붙어있으면 자동으로 필드들에 @Column 이 붙음
    • @Enumerated
      • Enum 매핑용도로 쓰이며 실무에서는 @Enumerated(EnumType.STRING) 으로 사용권장
      • Default 타입인 ORDINAL 은 0,1,2.. 값으로 들어가기 때문에 추후 순서가 바뀔 가능성있다.
  • Composite Value 타입 (여러 필드를 하나의 의미 있는 그룹으로 묶어서 사용하는 JPA의 기능)
    • @Embeddable
      • @Embeddable 어노테이션은 어떤 클래스가 다른 엔티티에 포함될 수 있는 복합 값 타입임을 나타냅니다.
        이 어노테이션을 사용하면 해당 클래스의 인스턴스가 엔티티의 일부분으로 데이터베이스 테이블에 맵핑될 수 있습니다.
      • @Embeddable이 붙은 클래스는 직접적으로 데이터베이스 테이블에 맵핑되지 않으며, 포함하는 엔티티의 일부로만 사용됩니다.
    • @Embedded
      • @Embedded 어노테이션은 엔티티 내에서 @Embeddable 어노테이션이 붙은 클래스의 인스턴스를 사용할 때 붙입니다. 이 어노테이션을 사용함으로써 해당 필드가 복합 값 타입의 인스턴스임을 명시하고, 엔티티의 일부로 해당 클래스의 필드들을 데이터베이스 테이블에 맵핑할 수 있게 됩니다.
    • @AttributeOverrides@AttributeOverride
      복합 값 타입을 사용할 때, 같은 타입의 복합 값이 여러 번 사용되거나 상위 엔티티의 컬럼명과 충돌이 일어날 수 있습니다. 이런 경우, @AttributeOverride@AttributeOverrides 어노테이션을 사용하여 복합 값 타입 내부의 필드 맵핑을 재정의할 수 있습니다.
      - @AttributeOverride: 단일 필드의 맵핑을 재정의할 때 사용합니다. name 속성으로 재정의할 필드를 지정하고, column 속성으로 새로운 컬럼 정보를 제공합니다.
      - @AttributeOverrides: 여러 필드의 맵핑을 재정의할 때 사용합니다. 이 어노테이션 내에
      - @AttributeOverride 어노테이션을 여러 개 사용하여 각 필드의 맵핑을 재정의할 수 있습니다.

0개의 댓글