본문 바로가기

Study/JPA

[JPA] 연관관계 매핑

연관관계 매핑


객체를 테이블에 맞추어 모델링 할 경우

외래 키 식별자를 직접 다룬다.

DTO
// Member
@Id
@GeneratedValue
private Long id;

@Column(name = "USERNAME")
private String name;
private int age;

@Column(name = "TEAM_ID")
private Long teamId;


// Team
@Id
@GeneratedValue
private Long id;
private String name;
// 팀을 저장할 때
Team team = new Team();
team.setName("teamA");
em.persist(team);

// 회원을 저장할 때
Member member = new Member();
member.setName("hello");
member.setTeamId(team.getId());
em.persist(member);

// 조회
Member findMember = em.find(Member.class, member.getId());

// 연관관계가 없으므로 따로 조회해야함.
Long teamId = findMember.getTeamId();
Team findTeam = em.find(Team.class, teamId);

객체를 테이블에 맞추어 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다.
  • 테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾는다.
  • 객체는 참조를 사용해서 연관된 객체를 찾는다.
  • 테이블과 객체 사이에는 이런 큰 간격이 있다.

단방향 매핑

객체 지향 모델링

객체 연관관계를 사용

DTO
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@Column(name = "USERNAME")
private String name;
private int age;

//    @Column(name = "TEAM_ID")
//    private Long teamId;

// 객체 지향 모델링
@ManyToOne
@JoinColumn(name="TEAM_ID")
private Team team;

위와 같이 만들 경우 연관관계가 생성됨

Team team = new Team();
team.setName("teamA");
em.persist(team);

Member member = new Member();
member.setName("member1");
member.setTeam(team);    // 단방향 연관관계 설정, 참조 저장
em.persist(member);

// 조회
Member findMember = em.find(Member.class, member.getId());
// 참조를 사용해서 연관관계 조회 -> 객체 그래프 탐색
Team findTeam = findMember.getTeam();

'Study > JPA' 카테고리의 다른 글

[JPA] JPA 내부 구조  (0) 2022.01.12
[JPA] 양방향 매핑  (0) 2022.01.12
[JPA] JPA 필드와 컬럼 매핑  (0) 2022.01.10
[JPA] JPA 기본과 매핑  (0) 2022.01.10
[JPA] JPA를 사용하는 이유  (0) 2022.01.10