JPA - Entity 생성을 위한 어노테이션
2023. 11. 15. 23:21ㆍ백엔드/Spring Boot
🧐 Entity를 생성할 때 자주 사용되는 어노테이션에 대하여 알아보자.
1. @Entity
- 작성한 클래스를 JPA Entity로 지정하는 역할로 객체와 DB 테이블과 매핑된다.
- 기본 생성자(파라미터가 없는 생성자)를 필수로 가져야 한다.
(명시적으로 선언하지 않은 경우 컴파일러가 기본 생성자를 자동으로 생성)
@Entity
public class Player {
// filed or method
// 기본 생성자
public Player() {
// 내용
}
}
2. @Table
- Entity와 매핑되는 테이블의 속성(테이블 이름, 카탈로그 스키마 등..)을 지정할 수 있다.
- 해당 어노테이션을 추가하지 않는다면 매핑한 엔티티 이름을 테이블 이름으로 사용한다.
@Entity
@Table(name = "player_info")
public class Player {
// filed or method
// 기본 생성자
public Player() {
// 내용
}
}
3. @Id , @GeneratedValuee
- @Id : 필드 위에 선언하며 엔티티의 기본 키(PK)를 의미한다.
- @GeneratedValue : 기본 키의 값을 자동으로 생성할 때 사용한다.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
4. @Column
- 엔티티의 필드와 DB 테이블의 컬럼 간 매핑을 지정한다.
- 이름, 길이, null 허용 여부등을 설정 할 수 있다.
✏️ 속성 종류
- name : DB 테이블의 컬럼 이름을 지정, 기본값은 필드명
- length : 주로 String 타입 필드에 사용되며 문자열 컬럼의 길이를 지정
- nullable : true, false로 허용 여부를 설정
- unique : true, false로 해당 컬럼의 값이 고유해야 하는지를 나타매며 중복 값이 허용되지 않음
- columnDefinition : 컬럼의 정의를 지정할 때 사용
@Column(name = "your_column", length = 50, nullable = false)
private String yourField;
5. @Enumerated
- Enum 타입 필드를 매핑할 때 사용한다.
✏️ 속성 종류
- EnumType.ORDINAL : Enum 상수의 순서를 저장
- EnumType.STRING : 상수의 이름을 문자열로 저장
@Entity
public class Player {
// Enum 타입 필드 매핑
@Enumerated(EnumType.STRING)
private YourEnumType yourEnumField;
}
6. @Temporal
- 날짜 및 시간 필드를 매핑할 때 사용한다.
- 날짜와 시간 정보를 DB에 어떻게 저장하고 가져올지 지정한다.
✏️ 속성 종류
- TemporalType.DATE : 날짜 정보만 저장
- TemporalType.TIME : 시간 정보만 저장
- TemporalType.TIMESTAMP : 날짜 및 시간 정보를 모두 저장
@Entity
public class YourEntity {
// java.util.Date 타입의 필드 매핑
@Temporal(TemporalType.DATE)
private Date dateField;
}
7. 관계 매핑을 위한 어노테이션
- @OneToMany, @ManyToOne, @ManyToMany, @OneToOne
// 일대다 관계
@OneToMany(mappedBy = "product")
private List<Review> reviews;
// 다대일 관계
@ManyToOne
@JoinColumn(name = "category_id")
private Category category;
// 다대다 관계
@ManyToMany
@JoinTable(
name = "product_tag",
joinColumns = @JoinColumn(name = "product_id"),
inverseJoinColumns = @JoinColumn(name = "tag_id")
)
private List<Tag> tags;
// 일대일 관계
@OneToOne
@JoinColumn(name = "detail_id")
private ProductDetail productDetail;
'백엔드 > Spring Boot' 카테고리의 다른 글
JWT를 적용한 로그인 구현하기 (4) | 2024.01.03 |
---|---|
DTO ↔ Entity 변환하기 (1) | 2023.11.16 |
JPA : Java Persistence API (1) | 2023.11.15 |
Entity vs DTO vs VO 개념과 특징 (1) | 2023.11.08 |
Controller,Service,Repository에서의 DI (0) | 2023.11.05 |