Back-End/JPA
JPA - 연관관계 매핑(조인 방법), 단방향 연관 관계 및 매핑
LightSource
2022. 8. 26. 16:49
JPA에서의 연관관계를 알아볼때 목표
- 객체지향적인 패러다임과 관계형 DB가 지향하는 패러다임의 차이를 이해해야 한다.
- 객체의 참조와 테이블의 외래 키를 매핑
용어
- 방향(Direction) : 단방향, 양방향
- 다중성(Multiplicity) : 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M)
- 연관관계의 주인(Owner) : 객체 양방향 연관관계는 관리 주인이 필요하다.
객체와 테이블 연관관계 사이의 차이
테이블의 경우
select * from member m join team t on m.team_id = 1
두개의 테이블을 조인하는 경우에는 join 쿼리문 하나로 간단하게 할 수 있다.
객체의 경우
Team team = new Team();
team.setName("TeamA");
em.persist(team);
Member member = new Member();
member.setUsername("member1");
member.setTeam(team);
em.persist(member);
Member findmember = em.find(Member.class, member.getId()); //DB에 접근해서 멤버 객체를 가져온다
long findTeamId = findmember.getTeamId(); //찾은 멤버 객체로 해당하는 TeamId를 가져오고,
Team findTeam = em.find(Team.class, findTeamId); //해당 TeamId로 Team 테이블에 접근한다.
객체로 정보를 찾는 경우, DB에 여러번 접근해야 해당 데이터를 찾을 수 있다.
테이블과 객체의 차이때문에 일어나는 문제
객체를 테이블에 맞추어 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다.
- 테이블은 외래키로 조인을 사용해서 연관된 테이블을 찾는다.
- 객체는 참조를 사용해서 연관된 객체를 찾는다.
단방향 연관 관계
연관 관계 설정
@Entity
public class Member {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
@Column(name = "USERNAME")
private String username;
@ManyToOne // Member가 여러개, Team이 하나
@JoinColumn(name = "TEAM_ID") // 조인되는 컬럼명 설정
private Team team;
}
@ManyToOne
: 다대일 매핑@JoinColumn
: 조인되는 컬럼 설정- 객체끼리 연관 시키기 위해 해당 객체를 멤버변수에 등록하고, 다중성 설정 및 실제 테이블에서 조인되는 컬럼 명을 설정한다.
Team team = new Team();
team.setName("TeamA");
em.persist(team);
Member member = new Member();
member.setUsername("member1");
member.setTeam(team);
em.persist(member);
Member findmember = em.find(Member.class, member.getId());
Team findTeam = findmember.getTeam(); // Member에 해당하는 Team이 조인되어 들어가 있음
System.out.println("findTeam.getName() = " + findTeam.getName());
- 이제는 team 객체를 member 객체에 setter를 통해서 주입하면, 위에서 설정한 컬럼명으로 조인해서 가져와 준다.
참조
https://www.inflearn.com/course/ORM-JPA-Basic
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의
JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런
www.inflearn.com
반응형