[JPA] 엔티티 매핑

SJ·2022년 12월 14일

JPA

목록 보기
4/12

엔티티 매핑 소개

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

객체와 테이블 매핑


@Entity

  • @Entity가 붙은 클래스는 JPA가 관리하며, 엔티티라고 한다.

  • JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수!

주의

  • 기본 생성자 필수(파라미터 없는 public, protected)

  • final, enum, interface, inner 클래스 사용 X

속성 정리

  • 속성 : name
    • JPA에서 사용할 엔티티 이름 지정
    • 기본값: 클래스 이름 그대로 사용 (예 : Member)

@Table

  • 엔티티와 매핑할 테이블 지정

  • 속성기능기본값
    name매핑할 테이블 이름엔티티 이름을 사용
    catalog데이터베이스 catalog 매핑
    schema데이터베이스 schema 매핑
    uniqueConstraints(DDL)DDL 생성 시에 유니크 제약조건 생성

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


  • DDL을 애플리케이션 실행 시점에 자동 생성(CREATE문으로 생성 가능)
  • 테이블 중심 -> 객체 중심
  • DB별 방언 활용해서 DB별로 적절한 DDL 생성
  • 생성된 DDL은 개발 장비에서만 사용

속성

  • hibernate.hbm2ddl.auto

    옵션설명
    create기본테이블 삭제 후 다시 생성(DROP + CREATE)
    create-dropcreate와 같으나 종료시점에 테이블 DROP
    update변경분만 반명(운영DB에서는 사용하면 안됨)
    validate엔티티와 테이블이 정상 매핑되었는지만 확인
    none사용하지 않음

주의

  • 운영 장비에는 create,create-drop,update 사용하지 말것

  • 개발 초기 : create or update

  • 테스트 서버 : update or validate

  • 스테이징, 운영 : validate or none


필드와 컬럼 매핑


@Entity
public class Member {
	
    @Id
    private Long id;
    
    @Column(name = "name")
    private String username;
    
    private Integer age;
    
    @Enumerated(EnumType.STRING)
	private RoleType roleType;
    
    @Temporal(TemporalType.TIMESTAMP)
    private Date createdDate;
    
    @Temporal(TemporalType.TIMESTAMP)
    private Date lastModifiedDate;
    
    @Lob
    private String description;
    
    public Member() {}
    }
  • @Id: PK 매핑
  • @Column(name ="name"): 필드는 username, DB에는 name이라고 쓰고 싶을 경우
  • @Enumerated(EnumType.STRING): DB에는 ENUM타입이 없기 때문에, STRING으로 저장
  • @Temporal(TemporalType.TIMESTAMP): 자바의 시간 관련 타입은 DATE,TIME,TIMESTAMP 세가지가 있기 때문에 매핑을 해주는것

@Column

속성설명기본값
name필드와 매핑할 컬럼 이름객체의 필드 이름
insertable,updatable등록,변경 가능 여부TRUE
nullable(DDL)null값의 허용 여부 설정. false시 DDL 생성시에 not null 제약조건 추가TRUE
unique(DDL)유니크 제약조건을 걸 떄 사용한다.(컬럼에선 잘 사용하지않음)TRUE
columnDefinition(DDL)데이터베이스 컬럼 정보 직접 줄 때 사용필드의 자바 타입과 방언 정보 사용
length(DDL)문자 길이 제약조건,String 타입에만 사용255
precision,scale(DDL)아주 큰 숫자, 소수점 필요할때 사용

@Enumerated

  • enum 타입을 매핑할 때 사용
  • 주의! ORDINAL 사용 X!
속성설명기본값
value- EnumType.STRING: enum 이름을 데이터베이스에 저장 - EnumType.ORDINAL: enum 순서를 데이터베이스에 저장EnumType.ORDINAL

@Temporal

  • 날짜 타입 매핑시에 사용
  • 자바 8부터는 LocalDate,LocalDateTime을 사용할 때에는 생략 가능

@Lob

  • 지정 속성 없음
  • 매핑 필드 타입 문자면 CLOB, 나머지는 BLOB

@Transient

  • 매핑 사용하지 않을때 사용

profile
slowly But Surely

0개의 댓글