JPA - 엔티티 매핑

JWbase·2024년 1월 8일
0

JPA

목록 보기
3/3
post-thumbnail

엔티티 매핑

  • 객체와 테이블 매핑
  • 필드와 컬럼 매핑
  • 기본 키 매핑
  • 연관관계 매핑

객체와 테이블 매핑

@Entity

  • @Entity가 붙은 클래스는 JPA가 관리하는 엔티티
  • 주의
    • 기본 생성자가 필수(parameter가 없는 public or protected)
    • final class, enum, interface, inner class에는 사용할 수 없다.
    • 저장할 필드에 final 키워드를 사용할 수 없다.

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

  • DDL을 어플리케이션 실행 시점에 자동 생성(로딩 시점에 create table이 가능)
  • DB에 맞는 방언을 사용해서 적절한 DDL 생성
  • 이렇게 생성된 DDL은 개발 장비에서만 사용!!

필드와 컬럼 매핑

@Entity
@Table(name = "MBR")
public class Member {

    @Id
    private Long id;

    @Column(name = "name", updatable = false, nullable = false, length = 10, columnDefinition = "varchar(100) default 'EMPTY'")
    private String username;

    @Column()
    private BigDecimal age;

    @Enumerated(EnumType.STRING) //enum을 사용할 때 , ORDINAL은 지양 -> ENUM의 순서가 바뀌면 알기 힘듦
    private RoleType roleType;

    @Temporal(TemporalType.TIMESTAMP) //java8 이후론 특별히 필요하지 않음
    private Date createDate;

    @Temporal(TemporalType.TIMESTAMP)
    private Date lastModifiedDate;

    @Lob//varchar을 넘기는 큰 양의 문자를 사용할 때
    private String description;

    @Transient //db와 관계없이 메모리에서만 사용하고 싶을 때
    private int temp;

    protected Member() {
    }
}
  • @Column()
    • name : DB에서 실제 사용할 컬럼명을 설정
    • updatable : updatable = false이 되어 있으면 업데이트 쿼리가 날아가지 않음
    • nullable : NOT NULL 제약 조건
    • columnDefinition = varchar(100) default 'EMPTY', 컬렴을 직접 정의할 수 있음
  • @Enumrated()
    • Enum타입을 DB와 매핑할때 사용
    • EnumType: ORDINAL -> ENUM의 순서대로(0, 1, 2...) 컬럼에 매핑 -> 사용지양
      EnumType는 반드시 EnumType.STRING를 사용하는 것이 좋다.
  • @Temporal()
    • 날짜와 관련된 DB매핑
    • TemporalType : 표현방법에 맞게 DATE, TIME, TIMESTAMP 존재하는데 현재는 잘 사용하지 않는다.
  • @Lob
    • clob, blob 타입에 사용
  • @Transient
    • DB매핑과 관계 없이 자바 내 메모리에서만 사용하고 싶을 때

기본 키 매핑

profile
기억 저장소!!

0개의 댓글