- Entity는 데이터베이스의 테이블과 일대일로 매칭되는 객체 단위
- @Entity JPA를 사용해 테이블과 매핑할 클래스에 붙이는 어노테이션
- @Entity 어노테이션을 클래스에 선언하면 그 클래스는 JPA가 관리
- 해당 클래스에 기본 생성자가 꼭 필요
- final, enum, interface에서는 사용 불가
- 필드를 final로 선언 불가
- name: JPA에서 사용할 엔티티 이름을 지정, default는 클래스 이름
// MemberA라는 테이블이 생성됨
@Entity(name = "MemberA")
public class Member {
...
}
- Entity와 매핑할 테이블을 지정
- 생략하면 매핑한 Entity 이름을 테이블명으로 사용
- name: 매핑할 테이블 이름, 기본값은 Entity 이름
- catalog: catalog 기능이 있는 DB에서 catalog 매핑
- schema: schema 기능이 있는 DB에서 schema 매핑
- uniqueConstraints: DDL 생성시 유니크 제약조건 생성
// MemberB 테이블이 생성
@Entity
@Table(name = "MemberB")
public class Member {
...
}
- 기본키로 지정하는 어노테이션
@Entity
public class Member {
...
@Id
private Long id;
...
}
기본키 매핑에 대해서는 따로 정리하도록 하겠다!
- 객체 필드를 테이블 컬럼과 매핑
- 필드에 속성을 지정할 때 사용
- name: 필드명을 지정, default는 객체의 필드 이름
- nullable: null값 허용 여부를 설정, default는 true
- insertable: 엔티티 저장 시의 필드값 저장 여부, default는 true
- updateable: 엔티티 수정 시 필드값 수정 여부, default는 true
- table: 하나의 엔티티를 두 개 이상의 테이블에 매핑할 때 사용
- unique: 해당 컬럼에 유니크 제약 조건을 설정, dafault는 false
- length: 문자 길이의 제약 조건을 설정, String 타입일 때 사용, default는 255
- columnDefinition: 테이블 컬럼의 속성을 직접 설정
- precision, scale: BigInteger, BigDecimal 타입에서 사용하며 각각 소수점 포함 자릿수, 소수의 자릿수를 의미, default는 각각 0
@Entity
public class Member {
...
// 컬럼명을 username으로, null값 저장 불가능하게 설정
@Column(name="username", nullabe=false)
private String name;
// unique 제약 조건 부여, 문자 길이 제약 500으로 설정
@Column(unique=true, length=500)
private Stirng address;
...
}
- 자바 enum 타입을 매핑할 때 사용
- EnumType.ORDINAL: Enum에 정의된 순서가 저장
- EnumType.STRING: STRING 타입으로 저장, 안정성의 이유로 권장
public enum RoleType {
USER, ADMIN
}
@Entity
public class Member {
...
@Enumerated(EnumType.STRING)
private RoleType roleType;
...
}
- 과거에 @Temporal 사용했으나 현재는 사용하지 않음
- LocalDate와 LocalDateTime 사용
@Entity
public class Member {
...
private LocalDate testLocalDate;
private LocalDateTime testLocalDateTime;
}
- Large Object의 줄임말로, 대용량 데이터 지정
@Entity
public class Member {
...
@Lob
private String description;
...
}
- 해당 필드를 매핑하지 않을 때 사용
- 사용 시 테이블의 컬럼에서 누락
@Entity
public class Member {
...
// 해당 필드 매핑되지 않음
@Transient
private String temp;
...
}