코딩딩/Spring

객체와 테이블 매핑

전낙타 2023. 10. 31. 21:31

객체와 테이블 매핑

@Entity

  • JPA가 관리하는 클래스
  • JPA에서 사용하려면 @Entity 어노테이션을 필수
  • 기본생성자는 필수로 있어야함
  • final, enum, interface, inner 클래스는 사용 X
  • final 필드 사용 X
// entity로 선언
@Entity
@Setter
@Getter
// MBR 테이블과 매칭할것
@Table(name = "MBR")
public class Member {

    // JPA가 가동되며 사용될 기본 키값
    @Id
    private Long id;
		// DDL 생성기능은 DDL을 자동 생성할때만 사용되고 JPA의 실행 로직에는 영향을 주지 않는다.
		// unique값과 length를 Column 어노테이션에서 설정해줄 수 있다
		// 쉽게말해 자동으로 테스트용 스키마를 생성할때 제약조건을 주고싶다면 설정할
    @Column(unique = true, length = 10)
    private String name;

    // JPA의 엔티티는 기본 생성자가 반드시 있어야 한다.
    public Member() {
    }

    public Member(Long id, String name) {
        this.id = id;
        this.name = name;
    }
}
  • 데이터베이스 스키마 자동생성
    • application 로딩 시점에 table생성이 되도록 설정 (운영에서는 사용 x 테스트용)
    xml 설정파일에 해당 property 추가
  • <property name="hibernate.hbm2ddl.auto" value="create"/>

필드와 컬럼 매핑

import jakarta.persistence.*;
import lombok.NoArgsConstructor;

import java.util.Date;
@Entity
@NoArgsConstructor
public class Member {
    @Id
    private Long id;
    @Column(name = "name")
    private String username;
    private Integer age;

    // enumType
    @Enumerated(EnumType.STRING)
    private RoleType roleType;

		// 최신 자바버전에서는 @UpdateTimestamp, @CreationTimestamp만 선언해줘도 된다.
    @Temporal(TemporalType.TIMESTAMP)
    private Date createdDate;
    @Temporal(TemporalType.TIMESTAMP)
    private Date lastModifiedDate;
    @Lob
    private String description;
}
  • Column
    • name : 필트와 매핑할 테이블의 컬럼이름
    • insertable, updatable : 등록, 변경 가능 여부
    • nullable(DDL) : false로 설정하면 DDL 생성시에 not null 제약조건이 붙는다
    • unique : DDL 생성시에 유니크 제약조건을 걸 수 있다
    • value (ORDINAL은 절대 사용 금지)
      • EnumType.ORDINAL: enum 순서를 데이터베이스에 저장
      • EnumType.STRING: enum 이름을 데이터베이스에 저장

기본키 매핑

		@Id
    @GeneratedValue
    private Long id;
  • @Id
    • 내가 직접 아이디를 세팅해주고 싶다면 해당 어노테이션만 사용하면 된다.
  • @GeneratedValue
    • 키를 자동 할당해줌, DB에 시퀀스 키를 걸어놓는것과 같다