<aside> 1️⃣ 엔티티(Entity)
</aside>
@Entity
어노테이션: 엔티티 클래스는 **@Entity
**라는 어노테이션으로 표시되어야 한다. 이것이 없으면 JPA는 이것을 엔티티로 인식하지 못한다.@Id
어노테이션이 붙은 필드)를 가지고 있어야 한다. 기본 키는 데이터베이스 테이블에서 각 레코드를 고유하게 식별하는 데 사용된다.MappedSuperclass
**이거나 다른 엔티티에 의해 상속받아야 한다.Member
엔티티가 있다고 가정해보자.@Entity
public class Member {
@Id
private Long id;
private String username;
// Getter, Setter ...
}
@Entity
어노테이션을 통해 JPA에게 이 클래스를 엔티티로 인식하게 한다.
**@Id
**는 해당 필드가 테이블의 PK(Primary Key)임을 나타낸다. 이렇게 각 필드는 테이블의 컬럼과 매핑된다
@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 ...
}
@ManyToOne
어노테이션은 "다대일" 관계를 매핑한다. 즉, 여기에선 여러 Member 엔티티 인스턴스가 하나의 Order 엔티티 인스턴스를 참조할 수 있다.
반대로, @OneToMany
어노테이션은 "일대다" 관계를 매핑하며, 이는 하나의 엔티티 인스턴스가 여러 엔티티 인스턴스를 참조할 수 있음을 나타낸다. 이런 관계들은 JPA가 데이터베이스의 관계형 모델을 객체 지향 모델로 잘 매핑하게 해준다.