[JPA] 객체(엔티티)와 DB 테이블 매핑 어노테이션 정리

go_go_·2023년 6월 22일
0

JPA

목록 보기
4/4
post-thumbnail

🔍 목차

  1. JPA에서 Entity - DB 매핑 소개
  2. 객체 - Table 매칭
  3. field - column 매칭
  4. 기본 키 매칭


JPA에서 Entity - DB 매핑 소개

엔티티 매핑 어노테이션

  • 객체 - Table 매핑: @Entity, @Table

  • field - column 매핑: @Column

  • 기본 키 매핑: @Id, @GeneratedValue

  • 연관 관계 매핑: @ManyToOne, @OneToMany, @ManyToOne



객체 - Table 매핑

사용 어노테이션: @Entity, @Table

@Entity

@Entity가 붙은 클래스는 JPA가 관리

  • @Entity 사용 시 기본 생성자 필수
    • 파라미터 없는 public 또는 protected 생성자
  • @Entity 사용할 수없는 클래스 목록
    • final 클래스, enum, interface, inner 클래스
  • 저장할 필드에 final 사용 불가
  • name 속성 사용하여 JPA에서 사용할 엔티티 이름 지정 가능
    • ex. @Entity(name = "hello")

@Table

@Table은 엔티티와 매핑할 DB 테이블 지정

  • @Table 없으면 @Entity의 이름 따라 테이블 매핑

속성 정리

속성설명기본 값
name매핑할 테이블 이름엔티티 이름
catalogDB의 catalog 매핑
schemaDB의 schema 매핑
uniqueConstraints(DDL)DDL 생성 시 유니크 제약 조건 생성


field - column 매핑

사용 어노테이션: @Column, @Temporal, @Enumerated, @Lob, @Transient

@Column

@Column(name = "username")
private String name;

속성 정리

속성설명기본 값
name필드와 매핑할 테이블의 컬럼 이름객체 필드 이름
insertable
updateable
등록, 변경 가능 여부
false로 설정 시 등록, 변경 불가
true
nullable
(DDL)
null 값 허용 여부
false로 설정 시 DDL 생성 시에 not null 제약 조건 붙음
true
unique
(DDL)
@Table의 uniqueConstraints 속성과 같지만 단일 컬럼에만 적용 가능
DDL 생성 시 유니크 제약조건 이름 랜덤으로 설정
flase
columnDefinitionDB의 컬럼 정보 직접 줄 수 있음
ex. colmunDefinition=”varchar(100) default EMPTY”)
length
(DDL)
문자 길이 제약 조건, String 타입에만 사용 가능
precision, scale
(DDL)
아주 큰 숫자나 정밀한 소수 다룰 때 사용
BigDecimal, BigInteger 사용 가능
double, float 타입 적용 X
percision: 소수점을 포함한 전체 자릿수
scale:소수의 자리수
ex. @Column(precisioin=0)


@Enumerated

enum 타입 매핑할 때 사용

@Enumerated(value = EnumType.STRING)
private Location location;
  • DB에 저장 시 타입 선택 가능
    • enum 순서(int) 또는 enum 이름(string)

속성 정리

속성설명기본 값
vlaue- EnumType.ORDINAL: enum 순서 저장(int)
- EnumType.STRING: enum 이름 저장(string)
EnumType.ORDINAL


@Tempoarl

날짜 타입 매핑할 때 사용

@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;

//@Temporal 생략 가능!
private LocalDate createDate2
  • java에서 날짜 타입
    • java.util.Date
    • java.util.Calendar
  • LocalDate, LocalDateTime을 사용할 때 생략 가능 (최신 하이버네이트 지원)

속성 정리

속성설명예시
value- TemporalType.DATE: 날짜, DB의 date 타입과 매핑
- TemporalType.TIME: 시간, DB의 time 타입과 매핑
- TemporalType.TIMESTAMP: 날짜와 시간, DB의 timestamp 타입과 매핑
2021-01-01
11:01:20
2023-01-01 12:01:45


@Lob

대형 오브젝트 저장할 때 사용

@Lob
private String description;
  • @Lab 어노테이션은 속성 x
  • DB의 BLOB, CLOB 타입과 매핑
    • CLOB: String, char[], jata.sql.CLOB
    • BOLB: byte[], java.sql.BLOB


@Transient

메모리에 임시로 보관하고 싶을 때 사용

@Transient
private Integer temp;
  • 필드 매핑x
  • DB에 저장x, 조회x
profile
개발도 하고 싶은 클라우드 엔지니어

0개의 댓글