DB/JPA

[JPA] Enity Annotation

annovation 2024. 12. 19. 12:51

@Entity 

@Entity는 JPA에서 이 클래스가 데이터베이스 테이블과 매핑되는 객체임을 나타냅니다.

@Entity
public class User {
    ...
}

@Table 

Entity 클래스가 매핑될 데이터베이스 테이블의 이름을 지정합니다. 이 Annotation은 선택사항으로, 생략하면 기본적으로 클래스 이름을 테이블 이름으로 사용합니다.

@Entity
@Table(name = "users")
public class User {
    @Id
    private Long id;
    private String name;
    private String email;
}
  • User 클래스는 데이터베이스의 users 테이블에 매핑됩니다.

@Id  

@Id 데이터베이스 테이블의 기본 키(Primary Key)를 정의합니다. 기본 키는 데이터베이스에서 각 행(row)을 고유하게 식별하는 데 사용됩니다.

@Entity
public class User {
    @Id
    private Long id;
    private String name;
    private String email;
}
  • id 필드가 테이블의 기본 키로 설정됩니다.

@GeneratedValue 

기본 키의 값을 데이터베이스가 자동으로 생성하도록 설정합니다. 예를 들어, MySQL의 AUTO_INCREMENT와 같은 기능을 의미합니다.

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
  • strategy : 기본 키 생성 전략을 정의합니다.
    • GenerationType.IDENTITY : 데이터베이스가 기본 키를 자동 생성
    • GenerationType.SEQUENCE : JPA에서 시퀀스를 이용해 생성
    • GenerationType.AUTO : 데이터베이스 설정에 따라 자동 결정

@Column 

@Column은 Entity 클래스의 필드를 데이터베이스의 특정 컬럼에 매핑합니다. 

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

 

  • name : 데이터베이스 컬럼 이름
  • nullable : 이 컬럼이 null을 허용하는지 여부
  • length : 컬럼의 최대 길이(문자열의 경우)

@ManyToOne 

여러 엔티티가 하나의 엔티티와 연관되어 있을 때 사용합니다. 데이터베이스에서는 보통 외래 키(Foreign Key)로 구현됩니다.

ex. 여러 주문이 하나의 고객을 참조함

@Entity
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    @JoinColumn(name = "customer_id") // 외래 키로 매핑
    private Customer customer;
}
  • Order(주문) : 여러 개의 주문이 있을 수 있음
  • Customer(고객) : 각 주문은 하나의 고객과 연결됨
  • @JoinColumn(name = "customer_id") : customer_id라는 외래 키를 통해 고객과 연결합니다.

@OneToMany

하나의 엔티티가 여러 엔티티와 연관되어 있을 때 사용합니다. 보통 컬렉션(Collection : ex. ArrayList)으로 표현됩니다.

@Entity
public class Customer {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(mappedBy = "customer", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<Order> orders = new ArrayList<>();
}
  • Customer(고객) 엔티티는 Order(주문) 엔티티와 일대다 관계를 가집니다.
  • 한 명의 고객이 여러 개의 주문을 가질 수 있습니다.
  • mappedBy = "customer" : 관계의 주인은 Order 엔티티의 customer 필드입니다. (주인이 아닌 곳은 외래 키를 직접 관리하지 않습니다.)
  • cascade = CascadeType.ALL : 고객이 삭제되면 관련된 주문도 함께 삭제됩니다.
  • orphanRemoval = true : Customer에서 orders 리스트에서 제거된 Order 엔티티는 자동으로 삭제됩니다.

출처

OpenAI ChatGPT (https://openai.com)

반응형