<aside> 1️⃣ 엔티티(Entity)

</aside>

@Entity
public class Member {
    @Id
    private Long id;
    private String username;

    // Getter, Setter ...
}
@Entity // 해당 클래스가 JPA 엔티티임을 나타냄
@Table(name = "members") // members 테이블과 매핑
public class Member {

    @Id // 기본 키(primary key) 필드임을 나타냄
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 기본 키 값을 자동으로 생성하는 전략을 지정
    @Column(name = "member_id") // 필드를 데이터베이스 테이블의 member_id 컬럼과 매핑
    private Long id; // id 필드

    @Column(name = "username") // 필드를 데이터베이스 테이블의 username 컬럼과 매핑
    private String username; // username 필드

    @ManyToOne // 다대일 관계를 매핑
    @JoinColumn(name = "team_id") // team_id 외래 키 컬럼과 매핑
    private Team team; // team 필드

    @OneToMany(mappedBy = "member", cascade = CascadeType.ALL)
    // Member와 일대다 관계를 매핑. Order 엔티티의 member 필드와 연결됨.
    // CascadeType.ALL은 연관된 엔티티에 대해 모든 작업을 전파한다는 의미
    private List<Order> orders; // orders 필드

    // Getter, Setter ...
}

<aside> 2️⃣ 엔티티 매핑

</aside>

// @Entity 어노테이션을 이용해서 해당 클래스가 엔티티임을 표시
@Entity
// @Table 어노테이션을 이용해서 해당 엔티티가 매핑될 테이블을 지정 (생략시 클래스 이름을 테이블 이름으로 사용)
@Table(name = "members")
public class Member {

    // @Id 어노테이션을 이용해 해당 필드가 기본키임을 나타냄
    @Id
    // @GeneratedValue 어노테이션은 기본키 생성을 데이터베이스에 위임함. 
    // IDENTITY 전략은 데이터베이스에 기본키 생성을 위임하는 전략 (예: MySQL, PostgreSQL)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // @Column 어노테이션은 필드를 테이블의 컬럼에 매핑함. 생략하면 필드 이름을 컬럼 이름으로 사용함.
    @Column(name = "username")
    private String username;

    // 관계형 매핑 어노테이션. @ManyToOne은 다대일 관계를 매핑함.
		// 여기서는 여러 개의 Member가 하나의 Order에 속할 수 있음을 나타냄.
		@ManyToOne
		// @JoinColumn 어노테이션은 외래키 매핑 시 사용됨. 여기서는 order_id가 외래키임을 표시.
		@JoinColumn(name = "order_id")
		private Order order;

    // Getter, Setter ...
}