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

 

반응형