JPA Mapping

2023. 3. 31. 23:28Spring

728x90

@Entity

  • JPA가 관리하는 클래스
  • 속성
    • @Entity(name = “”)
      • JPA에서 사용할 엔티티 이름 지정
      • 기본값 : 클래스 이름 그대로 사용

@Table

  • 엔티티와 매핑할 테이블 지정
  • 속성
    • @Table(name = “”)
      • 매핑할 이름 지정
      • 기본값 : 엔티티 이름
    • catalog
      • 데이터베이스 catalog 매핑
    • schema
      • 데이터베이스 schema 매핑
    • uniqueConstraints(DDL)
      • DDL 생성시에 유니크 제약 조건 생성

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

<https://gmlwjd9405.github.io/2019/08/11/entity-mapping.html>

속성값

  • create
    • 기존 테이블 삭제 후 다시 생성
  • create-drop
    • create와 동일하나 종료 시점에 데이블 DROP
  • update
    • 변경 분만 반영
  • validate
    • 엔티티와 테이블이 정상 매핑되었는지만 확인
  • none
    • 아무 속성도 사용하지 않음

@Column

  • 컬럼 매핑
  • 속성
    • name
      • 객체명과 DB 컬럼명을 다르게 하고 싶은 경우 사용
    • insertable
    • updatable
      • 컬럼을 수정했을 때 DB에 추가할 것인지 여부
      • false인 경우 변경이 되어도 DB에 반영되지 않음
    • nullable
      • not null 제약조건
    • unique
      • 이름을 랜덤으로 생성
    • columnDefinition
      • 컬럼 정보를 작성
    • length
      • 문자 길이 제약 조건
      • String 타입에만 사용
    • precision
      • 숫자가 엄청 큰 경우

@Enumerated

  • Enum 객체 사용시 사용
  • EnumType.ORDINAL
    • enum 순서를 데이터베이스에 저장
  • EnumType.String
    • enum 이름을 데이터베이스에 저장

@Temporal

  • 날짜 Type인 경우 사용
    • java.util.Date, java.util.Calendar
  • DATE
    • 날짜, DB의 date 타입과 매핑
  • TIME
    • 시간, DB의 time 타입과 매핑
  • TIMESTAMP
    • 날짜와 시간, DB의 timestamp 타입과 매핑

@Lob

  • varchar를 넘어서는 큰 내용을 넣고 싶은 경우 사용
  • CLOB
    • String, char[], java.sql.CLOB
  • BLOB
    • byte[], java.sql.BLOB

@Transient

  • 특정 필드를 컬럼에 매핑하지 않음
  • DB에 관계없이 메모리에서만 사용하고자 하는 경우 사용
  • DB에 저장, 조회가 안됨

@ManyToOne

  • N : 1 관계
  • 속성
    • targetEntity
      • 관계를 맺을 Entity Class 정의
    • cascade
      • Entity의 변경에 대해 관계를 맺은 Entity도 변경 전략 결정
      • 속성 : CasecadeType에 ALL, PERSIST, MERGE, REMOVE, REFRESH, DETACH 존재
    • fetch
      • 데이터 읽기 전략
      • FetchType.EAGER
        • entity의 정보를 미리 읽어오는 것
      • FetchType.LAZY
        • 실제로 요청하는 순간 가져오는 것
    • optional
      • false 설정 : 해당 객체에 null 가능
	@ManyToOne(targetEntity = User.class, fetch = FetchType.LAZY)
  @JoinColumn(name = "user_pk")
  private User user;

참고자료

https://gmlwjd9405.github.io/2019/08/11/entity-mapping.html

https://jdm.kr/blog/142

'Spring' 카테고리의 다른 글

Spring Swagger  (0) 2023.04.03
Spring Security  (0) 2023.04.03
GenerationType  (0) 2023.03.31
Spring_Entity, DTO, VO  (0) 2023.03.22
Spring_MySQL 연결_gradle  (0) 2023.03.22