방향(Direction) : 단방향, 양방향
다중성(Multiplicity) : 다대일 (N:1) , 일대다 (1:N) , 일대일 (1:1) , 다대다 (N:M)
연관관계의 주인(Owner) : 객체 양방향 연관관계는 관리 주인이 필요
객체를 테이블에 맞추어 모델링 (참조 대신에 외래 키를 그대로 사용)
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
@Column(name = "USERNAME")
private String name;
@Column(name = "TEAM_ID")
private Long teamId;
…
}
@Entity
public class 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("member1");
member.setTeamId(team.getId());
em.persist(member);
//조회
Member findMember = em.find(Member.class, member.getId());
//연관관계가 없음
Team findTeam = em.find(Team.class, team.getId());
-> 객체 지향적인 방법이 아니다.
단방향 연관관계
@Entity
public class Member {
@Id @GeneratedValue
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;
…
@ManyToOne과 @JoinColumn을 사용하여 연관관계 매핑을 해주면
//팀 저장
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();
과 같이 객체지향적으로 나타낼 수 있다.
'🍀Spring > JPA' 카테고리의 다른 글
[JPA] 다양한 연관관계 매핑 (0) | 2024.07.18 |
---|---|
[JPA] 연관관계 매핑 - 양방향 연관관계와 연관관계의 주인 (0) | 2024.07.06 |
[JPA] 기본 키 (Primary Key) 매핑 - (@Id, @GeneratedValue) (0) | 2024.07.04 |
[JPA] 필드와 컬럼 매핑 (@Column) (0) | 2024.07.04 |
[JPA] 엔티티 매핑 (@Entity, @Table) (0) | 2024.07.04 |