[JPA] JPA 사용하기

하윤철·2024년 8월 9일

가장 잘 짠 ERD를 예시로 알아보자

부모

idname
parent1parent1
parent2parent2
parent3parent3

자식

idnameparent_id
1child1parent1
2child2parent2
3child3parent3

객체 연관 관계

class Parent {
	String id;
	String name;
}
class Child {
	int id;
	String name;
	Parent parent
}

Child 객체는 Parent 객체를 참조 할 수 있다.(필드를 가졌기 때문에)

→Child 객체를 통해 Parent 객체의 맴버에 접근 할 수 있다.

→Parent는 Child 객체에 접근 불가 하니 단방향이다 (Child → Parent)

ERD: 방향 X (Join이 있기 때문)

객체: 방향 O (객체를 가지지않으면 접근 불가)

단방향

A 클래스가 B 객체 필드를 가지면 A→B 단방향관계

양방향→ 정확히는 서로 단방향

  • 다대일: ‘다’ 객체가 ‘일'객체 참조
  • 일대다: ‘일’ 객체가 ‘다'객체 참조

양방향 → 정확히는 서로 단방향

A,B클래스가 A,B객체를 서로 필드로 가지고 있는 것

  • 다대일: ‘다’ 객체가 연관관계의 주인일 때
  • 일대다: ‘일’ 객체가 연관관계의 주인일 때

연관 관계의 주인

FK를 관리(수정, 삭제 등) 하는 객체

→연관 관계의 주인은 ERD를 보고 정하는 것

예시) 호텔이 방들을 가지고 있다. 하지만 방들이 호텔ID를 FK로 가지고 있으니 방들이 주인이 되어야한다.

class Hotel {
	String name;
	List<Room> rooms;
}
class Room {
	String name;
	Hotel hotel; //쓸모 없지만 FK 처럼 추가
	}

JPA를 사용해보자

@(어노테이션) 사용

  • @ManyToOne: 주인 입장에서 아래 필드가 다대일 관계 매핑
  • @JoinColmn(name = 참조 객체 키값): 연관관계(join)
  • @Column: DB 컬럼과 매핑해주기(이름 동일하면 생략가능)
  • @Table: DB 테이블 명 (예약어 회피 위해, 보통 복수형)
@Entity
class Child {
	@Id
	int id;
	String name;
	@ManyToOne
	@JoinColmn("parent_Id")
	Parent parent
}
@Entitiy
class Parent {
	@Id
	String id;
	String name;
	@Column(name="account_number"
	String accountNumber
}
profile
선순환을 만드는 개발자

0개의 댓글