JPA -2 엔티티 설계

요한·2025년 6월 7일

JPA

목록 보기
2/4

1. 엔티티란

Entity 뜻은 개체, 실체라는 뜻으로 이전글에서 설명했듯이 ORM(Object Releation Mapping)으로 DB 테이블과 매핑되는 자바 클래스을 말한다!

2. 주인(Owner), 비주인(Non-Owner) 관계

Entity 설계에 앞서 간단한 개념을 정리하고 가보자고요!
DB에서 중요한 개념 중 하나는 부모-자식 관계이며, 이는 PK(Primary Key)FK(Foreign Key)를 통해 연결됩니다.

예) 사원(Employee) - 부서(Department)

employee

id (Pk)namedepartment_id(FK)
1요한1
22

department

id (Pk)name
1개발
2디자인

이렇게 진행하면, FK가 있는 employee가 자식이다.

❗️주인-비주인 관계

DB에서 FK가 있으면, 자식이니까 비주인이겠지라는 생각을 하면 안된다.
JPA 엔티티 설계할때 FK가 있으면 대부분 주인이다. 저도 처음 공부할때 헷갈렸다.

⭐️ 정리

연관관계의 주인만이 데이터베이스 연관관계와 매핑되고 외래 키를 관리(등록, 수정, 삭제)할 수 있습니다. 반면에 주인이 아닌 쪽은 읽기만 할 수 있습니다.

3.Entity 설계

앞서 예제에서 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를 해보겠습니다! 감사합니다 :)

profile
코드 깍는 개발자 kangyohan.dev.0421@gmail.com

0개의 댓글