본 포스팅은 인프런 - 자바 ORM 표준 JPA 프로그래밍 (기본편)을 강의를 바탕으로 공부하고 정리한 글입니다.
연관 관계 X
@Entity
public class Member {
@Id
@GeneratedValue
@Column(name = "member_id")
private Long id;
@Column(name = "user_name")
private String username;
@Column(name = "team_id")
private Long teamId;
}
@Entity
public class Team {
@Id
@GeneratedValue
@Column(name = "team_id")
private Long id;
private String name;
}
- 참조 대신에 외래 키를 그대로 사용한다.
- 연관관계 설정이 없다.
// 팀 저장
Team team = new Team();
team.setName("teamA");
em.persist(team);
// 회원 저장
Member member = new Member();
member.setUsername("member1");
member.setTeamId(team.getId());
em.persist(member);
- member.setTeamId(team.getId());
- 외래키 식별자를 직접 다루고 있음을 알 수 있다.
// 조회
Member findMember = em.find(Member.class, member.getId());
// 연관관계가 없음
Team findTeam = em.find(Team.class, team.getId());
- 식별자로 다시 조회
- 이는 객체 지향적인 방법은 아니다.
- findMember.getTeam(); 같은 경우가 객체 지향적이라 할 수 있다.
✅ 결론
- 객체를 테이블에 맞춰 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다.
- 테이블은 외래 키로 조인을 사용해 연관된 테이블을 찾으며, 객체는 참조를 사용해 연관된 객체를 찾는다.
- 테이블과 객체 사이에는 이런 큰 간격이 있다.
단방향 매핑
@Entity
public class Member {
@Id
@GeneratedValue
@Column(name = "member_id")
private Long id;
@Column(name = "user_name")
private String username;
@ManyToOne
@JoinColumn(name = "team_id")
private Team team;
}
@Entity
public class Team {
@Id
@GeneratedValue
@Column(name = "team_id")
private Long id;
private String name;
}
- @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.setTeam(team)을 통해 둘의 연관 관계를 저장한다.
// 조회
Member findMember = em.find(Member.class, member.getId());
// 참조를 사용해 연관관계 조회
Team findTeam = findMember.getTeam();
- findMember.getTeam() : 객체 참조를 통해 연관 관계를 조회해온다.
Reference
'🌱 Spring > JPA' 카테고리의 다른 글
[JPA] 프록시 (0) | 2022.10.18 |
---|---|
[JPA] 상속관계 매핑(@Inheritance), 매핑 정보 상속@MappedSuperclass) (0) | 2022.10.17 |
[JPA] 연관관계 매핑(3) - 다중성 (ManyToOne, ManyToOne, OneToOne, ManyToMany) (1) | 2022.10.11 |
[JPA] 연관관계 매핑(2) : 양방향 매핑 (0) | 2022.10.06 |
[JPA] 데이터베이스 스키마 자동 생성 : DDL AUTO (0) | 2022.09.30 |
[JPA] 엔티티 매핑(2) - 기본 키 매핑 전략 (1) | 2022.09.30 |
[JPA] 엔티티 매핑(1) - 객체와 테이블, 필드와 컬럼 매핑 (0) | 2022.09.30 |
[JPA] 영속성 관리 (0) | 2022.09.29 |