JPA 연관 관계 - 객체 지향 스럽게 모델링 하기

목차

객체 지향 스럽게 모델링 하기

객체는 참조를 이용해 다른 객체를 가져올 수 있다.

  • 한 객체내에 관련된 객체 정보를 가질 수 있도록 모델링한다.
  • Member 에서 Team 정보를 가져올 때 Member 객체 내 참조 를 통해 정보를 가져올 수 있다.

N:1 연관 관계를 명시할 때는 @ManyToOne@JoinColumn 을 이용해 관계를 나타낸다.

@Entity
public class Member {

@Id
private long id;

private String username;

@ManyToOne
@JoinColumn
private Team team; // Member 객체 내에서 관련된 Team 객체를 관리할 수 있도록 변경
}

Member 가 소속된 Team 정보 가져오기

처음에 설계된 객체와는 다르게 Member 객체내에서 관련된 Team 정보를 가져올 수 있다.

Team team = new Team();
team.setName("TeamA");
entityManager.persist(team);

Member member = new Member();
member.setUsername("member1");
member.setTeam(team);
entityManager.persist(team);

// Member 객체내에서 연관된 Team 정보를 바로 조회한다.
Member findMember = entityManager.find(Member.class, member.getId());
Team findTeam = findMember.getTeam();

entityManager.persist(member);

객체와 테이블간의 패러다임 차이

테이블의 경우 외래키를 이용해 양방향 조회가 가능하다.
하지만, 객체에서 관계는 단방향으로만 관계를 맺기 때문에 반대 방향으로의 조회는 불가능 하다.
반대 방향으로 조회가 가능하게 하려면 연관된 객체에서도 정보를 관리하도록 설계해야 한다.

Share