[Spring_Boot] JPA - 엔티티 매핑

최현석·2022년 12월 4일
0

Spring_Boot

목록 보기
20/31

🧩 객체와 테이블 매핑

엔티티 매핑 소개

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

객체와 테이블 매핑 - @Entity

  • @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다.
  • JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수
  • 기본 생성자 필수
  • enum, interface 클래스 사용 불가
  • 저장할 필드(전역변수)에 final 사용 불가
  • 속성 : name
    • JPA에서 사용할 엔티티 이름을 지정한다.
    • 기본값을 쓸것을 권장

@Table

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

Table 속성

  • name : 매핑할 테이블 이름
  • catalog : 데이터베이스 catalog 매핑
  • schema : 데이터베이스 shema 매핑
  • DDL(uniqueConstraints) : DDL 생성 시에 유니크 제약 조건 생성
  • @Table 은 persistence로 생성한다.

  • Table이름이 MBR로 만들어진다.


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

  • DDL을 애플리케이션 실행 시점에 테이블 자동 생성
  • 테이블 중심 -> 객체 중심
  • 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성

hibernate.hgm2ddl.auto 옵션

  • 데이터베이스 스키마 자동생성 옵션
  • create : 기존 테이블 삭제 후 다시 생성(drop + create)
  • create-drop : create와 같으나 종료 시점에 테이블 drop
  • update : 변경분만 반영
  • validate : 엔티티와 테이블이 정상 매핑되었는지만 확인
  • none : 사용하지 않음

제약조건 추가 : 회원이름 필수, 길이는 10자

  • @Column(nullable = false, length = 10)
  • @Temporal : 날짜 타입 매핑
  • @Enumerated : enum 타입 매핑
  • @Lub : BLUB, CLOB 매핑
  • @Transiet : 특정 필드를 컬럼에 매핑하지 않음

Member

@Entity
@Getter @Setter
//@Table(name="MBR")
public class Member {
	
	@Id
	private Long id;
	
	@Column(unique = true, length = 10)
	private String name;
	
	// 컬럼명 지정
	@Column(name = "myage")
	private int age;
	
	// 날짜타입 매핑
	@Temporal(TemporalType.TIMESTAMP)
	private Date createDate;
	
	// 날짜타입 매핑
	@Temporal(TemporalType.TIMESTAMP)
	private Date lastModifiedDate;
	
	// 매핑 무시
	@Transient
	private int temp;
	
}

@Column

  • name : 필드와 매핑할 테이블의 컬럼 이름
  • nullable : null값의 허용 여부 설정 (false로 설정하면 not null 제약조건 붙는다.)
  • unique : 한 컬럼에 대해 unique하게 제약조건을 걸때 사용
  • length : 문자 길이 제약조건, String 타입에만 사용

🧩기본 키 매핑

  • @Id
  • @GeneratedValue

@Id

  • 데이터베이스 테이블의 기본 키(PK)와 객체의 필드를 매핑시켜주는 어노테이션
  • @Id만 사용할 경우 기본 키를 직접 할당해 주어야 한다.
    • 기본 키를 직접 할당하는 대신 데이터베이스가 생성해주는 값을 사용하려면 @GeneratedValue를 사용해주면 됩니다.

@GeneratedValue

  • 기본 키를 자동 생성해주는 어노테이션입니다.

  • 자동생성 -> 전략
    -> identity : 데이터베이스에 위임
    -> sequence : 데이터베이스 시퀀스 오브젝트 사용
    @SequenceGenerator 필요
    -> table : 키 생성용 테이블 사용, 모든 DB에서 사용
    @TableGenerator
    -> auto : 방언에 따라 자동 지정, 기본값

  • @SequenceGenerator
    -> name : 식별자 이름
    -> sequenceName : 데이터베이스 등록되어 있는 시퀀스 이름
    (hibernate_sequence)
    -> initialValue : 시퀀스 DDL을 생성할때 처음 시작하는 수 지정
    -> allocationSize : 데이터베이스 시퀀스 값이 하나씩 증가하도록 설정
    이 값을 1로 설정
    -> catalog, schema : 데이베이스 catalog, schema 이름 설정

0개의 댓글