🏷️ @Entity란?

정의

@EntityJPA에서 데이터베이스 테이블과 매핑되는 클래스를 선언하는 어노테이션이다.

@Entity가 붙은 클래스는 JPA가 관리하는 객체가 되며, 영속성 컨텍스트와 연결된다.
즉, 단순한 일반 클래스가 아니라 DB 테이블과 대응되는 엔티티 클래스로 취급된다.

⚙️ 역할

  • JPA가 관리하는 엔티티 클래스를 선언한다.
  • 객체와 테이블의 매핑 기준이 된다.
  • ORM을 통해 데이터를 저장, 조회, 수정, 삭제할 수 있게 한다.

🧩 함께 자주 쓰는 어노테이션

@Id

  • 엔티티의 기본 키를 지정한다.
  • @Entity에는 기본 키가 반드시 필요하다.

@GeneratedValue

  • 기본 키 생성 전략을 지정한다.
  • 데이터베이스 자동 증가나 시퀀스 전략과 함께 사용한다.

@Table

  • 엔티티가 매핑될 테이블 이름과 제약 조건을 지정한다.

@Column

  • 필드와 컬럼의 세부 매핑을 지정한다.

🧪 사용 예시

import javax.persistence.*;

@Entity
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "username", nullable = false, length = 50)
    private String name;

    protected User() {
    }

    public User(String name) {
        this.name = name;
    }
}

🔍 주의점

  • 기본 생성자가 반드시 필요하다.
  • 식별자 필드(@Id)가 있어야 한다.
  • final 클래스나 final 필드는 JPA와 잘 맞지 않는다.
  • 요청/응답 DTO 대신 Entity를 직접 노출하는 것은 지양하는 편이 좋다.

✅ 장점

  • 객체와 데이터베이스 매핑을 자동화할 수 있다.
  • SQL을 직접 작성하지 않아도 기본적인 CRUD가 가능하다.
  • @OneToMany, @ManyToOne 같은 연관관계 매핑과 함께 사용할 수 있다.

⚠️ 단점

  • 매핑 오류는 런타임에 발견될 수 있다.
  • 테이블 구조와 객체 구조를 함께 고려해야 한다.
  • 잘못 사용하면 엔티티가 복잡해질 수 있다.

📌 정리

  • @Entity는 JPA 엔티티를 선언하는 기본 어노테이션이다.
  • 기본 키와 기본 생성자가 필수다.
  • @Table, @Column, @GeneratedValue와 함께 많이 사용한다.

연결문서

댓글남기기