객체와 테이블 매핑
@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에 시퀀스 키를 걸어놓는것과 같다