@Entity
클래스에 @Entity가 있다면 JPA가 관리하는 Entity로 만들어진다.
@Entity
@Table(name = "tutor")
public class Tutor {
// PK
@Id
private Long id;
// 필드
private String name;
// 기본 생성자
public Tutor() {
}
// 쉽게 사용하기 위해 생성자 추가
public Tutor(Long id, String name) {
this.id = id;
this.name = name;
}
}
필수 규칙!!
- JPA를 사용하여 객체를 테이블과 매핑할 때 사용한다.
- PK 값이 필수이다.(@Id 사용)
- 기본 생성자는 필수이다.
- final, enum, interface, inner 클래스에는 사용할 수 없다.
- 필드에 final 키워드를 사용할 수 없다.
@Table
@Entity
@Table(name = "tutor")
public class Tutor {
}
- 속성
- name
- Entity와 매핑할 테이블 이름을 지정
- 기본 값은 Entity 이름(Tutor)을 사용 (하지만 DB는 기본적으로 소문자를 사용하기 때문에)
- catalog
- 데이터베이스 catalog 매핑
- schema
- 데이터베이스 schema 매핑
- uniqueConstraints
- DDL 생성 시 유니크 제약 조건 설정
- name
제약 조건 설정
JPA를 사용하면 DDL 생성 시 제약조건을 설정할 수 있다. 실행 로직과는 별개로 DDL 생성시에만 활용된다.
1. @Column
- unique : 유니크, 기본값 false
- nullable : 필수 여부, 기본값 true
- length : 길이
@Column(unique = true, length = 20, nullable = false)
- DDL 자동 생성 시 제약 조건이 설정된다.
2. @Table
- uniqueConstraints : 유니크, 이름을 직접 설정할 수 있다.
필드 매핑
JPA로 관리되는 클래스인 Entity의 필드는 테이블의 컬럼과 매핑된다.
@Entity
@Table(name = "board")
public class Board {
@Id
private Long id;
// @Column을 사용하지 않아도 자동으로 매핑된다.
private Integer view;
// 객체 필드 이름과 DB 이름을 다르게 설정할 수 있다.
@Column(name = "title")
private String bigTitle;
// DB에는 기본적으로 enum이 없다.
@Enumerated(EnumType.STRING)
private BoardType boardType;
// VARCHAR()를 넘어서는 큰 용량의 문자열을 저장할 수 있다.
@Column(columnDefinition = "longtext")
private String contents;
// 날짜 타입 DATE, TIME, TIMESTAMP를 사용할 수 있다.
@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
@Transient
private int count;
public Board() {
}
}
- 실행결과

- 사용되는 Annotation
| 종류 | 설명 |
| @Column | DB 컬럼 매핑에 사용 |
| @Temporal(최신 버전 생략O) | 날짜 타입 |
| @Enumerated | enum 타입 |
| @Transient | DB 컬럼과 매핑하지 않을 때 |
| @Lob | tinytext |
- @Enumerated
| 속성 | 값 | 설명 | Default |
| value | EnumType.ORDINAL EnumType.STRING |
enum 순서 저장 enum 이름 저장 |
EnumType.ORDINARY |

EnumType.ORDINARY를 사용하면 Enum 값이 추가될 때 마다 순서가 바뀌기 때문에 실제로 사용X!!
기본키
JPA Entity를 생성할 때 기본키는 필수로 생성해야 한다.
1. @Id
- 수동생성
Tutor tutor = new Tutor(1L, "병천");
2. @GeneratedValue
- 자동 생성
@Id
@GeneratedValue(strategy = GenerationTye.IDENTITY)
private Long id;
- IDENTITY 전략을 사용하면 persist() 이후 PK를 바로 조회할 수 있다.
'Back-End > JPA' 카테고리의 다른 글
| JPA 데이터베이스 스키마 자동 생성과 주의점 (1) | 2024.12.13 |
|---|---|
| JPA 연관관계 Mapping (0) | 2024.12.10 |
| JPA의 지연 저장소, 변경 감지, 그리고 flush와 Commit (1) | 2024.12.10 |
| JPA - 영속성 컨텍스트(1차 캐시, 동일성 보장, 쓰기 지연) (0) | 2024.12.10 |
| JPA - 영속성 컨텍스트(Entity) (0) | 2024.12.10 |