Entity 뜻은 개체, 실체라는 뜻으로 이전글에서 설명했듯이 ORM(Object Releation Mapping)으로 DB 테이블과 매핑되는 자바 클래스을 말한다!
Entity 설계에 앞서 간단한 개념을 정리하고 가보자고요!
DB에서 중요한 개념 중 하나는 부모-자식 관계이며, 이는 PK(Primary Key)와 FK(Foreign Key)를 통해 연결됩니다.
employee
| id (Pk) | name | department_id(FK) |
|---|---|---|
| 1 | 요한 | 1 |
| 2 | 존 | 2 |
department
| id (Pk) | name |
|---|---|
| 1 | 개발 |
| 2 | 디자인 |
이렇게 진행하면, FK가 있는 employee가 자식이다.
DB에서 FK가 있으면, 자식이니까 비주인이겠지라는 생각을 하면 안된다.
JPA 엔티티 설계할때 FK가 있으면 대부분 주인이다. 저도 처음 공부할때 헷갈렸다.
연관관계의 주인만이 데이터베이스 연관관계와 매핑되고 외래 키를 관리(등록, 수정, 삭제)할 수 있습니다. 반면에 주인이 아닌 쪽은 읽기만 할 수 있습니다.
앞서 예제에서 employee 와 department가지고 코드 작성을 하겠습니다!. 전체적인 코드를 보여드리고 하나하나 설명하겠습니다!
@Entity
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@OneToMany(mappedBy = "department")
private List<Employee> employees =new ArrayList<>();
}
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@ManyToOne
@JoinColumn(name="department_id")
private Department department;
}
여기서 주인은 employee이다! 꼭 이거를 알고가자! 위에서 FK가지고 있는 쪽이 주인이다.
@Entity : 지금 사용하는 객체가 entity로 지정
@Id : PK값 지정
@GeneratedValue : PK 값 자동 생성
@JoinColumn(name="department_id") : FK지정 name은 옵션으로 Fk 이름 지정
@OneToMany(mappedBy = "department") : oneToMany는 1: N
mappedBy는 "연관관계의 주인은 내가 아니다" 라는 뜻이다
@ManyToOne : N:1를 나타낸다. 즉 FK소유자
다음글에선 이걸 기반으로 CRUD를 해보겠습니다! 감사합니다 :)