매일 한줄 코딩

[JPA] 엔티티 매핑 본문

develop/JPA(ORM)

[JPA] 엔티티 매핑

ShipJH 2022. 12. 22. 15:53

5. 엔티티 매핑

1. 필드와 컬럼 매핑

  • 객체와 테이블 매핑: @Entity, @Table
  • 필드와 컬럼 매핑: @Column
  • 기본 키 매핑: @Id
  • 연관관계 매핑: @ManyToOne,@JoinColumn

@Entity

기본값: 클래스 이름을 그대로 사용(예: Member)

같은 클래스 이름이 없으면 가급적 기본값을 사용한다.


@Table

엔티와 매핑할 테이블 지정

옵션

  • name : 매핑할 테이블 명을 기입
  • catalog ,schema : 데이터베이스 catalog , schema 매핑
  • uniqueConstraints(DDL) : DDL생성시에 유니크 제약 조건 생성
  • @Table(uniqueConstraints = {@UniqueConstraint( name = "NAME_AGE_UNIQUE", columnNames = {"NAME", "AGE"} )})

@Column

컬럼 매핑

unique 같은경우 column에 사용할 경우 유니크명이 자동생성된다 ( 이상한 형태로 ) 그래서, @Table 에 유니크 제약조건을 넣으면 된다.

DDL생성기능 옵션의 예 (null 비허용, 길이 10)

  • @Column(nullable = false, length = 10)
  • 단, 생성될때의 조건이지, JPA의 실행로직에는 영향을 주지 않는다!


@Temporal

날짜 타입(java.util.Date, java.util.Calendar)을 매핑할 때 사용
참고: LocalDate, LocalDateTime을 사용할 때는 생략 가능(최신 하이버네이트 지원)

@Enumerated

enum 타입을 매핑할 때 사용

ORDINAL을 쓰게되면 순서를 저장하게되기 때문에 enum의 이름이 아니라, 순서가 저장된다. (Integer 타입으로 생성이 된다.)

추후에 enum이 추가된다면, 0,1,2 로 들어간 순서가 뒤바뀔 수 있기 때문이다.때문에 enum의 이름을 넣어줘야된다.

‼️ORDINAL 금지!

@Lob

CLOB , BLOB 사용할때 사용

매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑
CLOB: String, char[], java.sql.CLOB
BLOB: byte[], java.sql. BLOB

@Transient

  • 필드 매핑X
  • 데이터베이스에 저장X, 조회X
  • 주로 메모리상에서만 임시로 어떤 값을 보관하고 싶을 때 사용
// ex
@Transient
private Integer temp;

기본키 전략 정리 필요..

키본키 생성시점 null이라 영속성컨텍스트에 id를 알 수 없어 중간에 persist 하여야만 알 수 있다.

테이블전략으로도 퍼시스트 할때 오토인크리먼트 크기만큼 가져와 memory에 갖고 쓸 수 있다

'develop > JPA(ORM)' 카테고리의 다른 글

[JPA] 준영속 상태  (0) 2022.12.22
[JPA] 플러시  (0) 2022.12.22
[JPA]영속성 컨텍스트  (0) 2022.12.22
Comments