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 허용 여부등을 설정 할 수 있다. 

✏️ 속성 종류 

  1. name : DB 테이블의 컬럼 이름을 지정, 기본값은 필드명
  2. length : 주로 String 타입 필드에 사용되며 문자열 컬럼의 길이를 지정
  3. nullable : true, false로 허용 여부를 설정 
  4. unique : true, false로 해당 컬럼의 값이 고유해야 하는지를 나타매며 중복 값이 허용되지 않음 
  5. columnDefinition : 컬럼의 정의를 지정할 때 사용 
@Column(name = "your_column", length = 50, nullable = false)
private String yourField;

 

 

 

 

5.  @Enumerated

  • Enum 타입 필드를 매핑할 때 사용한다. 

✏️ 속성 종류

  1. EnumType.ORDINAL : Enum 상수의 순서를 저장 
  2. EnumType.STRING : 상수의 이름을 문자열로 저장 
@Entity
public class Player {

    // Enum 타입 필드 매핑
    @Enumerated(EnumType.STRING)
    private YourEnumType yourEnumField;
}

 

 

 

 

6.  @Temporal

  • 날짜 및 시간 필드를 매핑할 때 사용한다. 
  • 날짜와 시간 정보를 DB에 어떻게 저장하고 가져올지 지정한다. 

✏️ 속성 종류

  1. TemporalType.DATE : 날짜 정보만 저장 
  2. TemporalType.TIME : 시간 정보만 저장
  3. 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