단방향 연관관계
- 다대일
Member 클래스
@ManyToOne // 다대일(N:1) 관계라는 매핑 정보
@JoinColumn(name=”TEAM_ID”) // 조인 컬럼은 외래 키를 매핑할 때 사용
private Team team;
@JoinColumn
속성
name | 매핑할 외래 키 이름 |
referencedColumnName | 외래 키가 참조하는 대상 테이블의 컬럼명 |
foreignKey(DDL) | 외래 키 제약조건을 직접 지정할 수 있다. 테이블을 생성할 때만 사용 |
@OneToOne : 일대일 관계
연관관계 사용
- 저장
Team team1 = new Team(“team1”, “팀1”); em.persist(team1); //회원1 저장 Member member1 = new Member(“member1”, “회원1”); Member1.setTeam(team1); //연관관계 설정 member1-> team1 em.persist(member1);
- 조회
- 객체 그래프 탐색
Member member = em.find(Member.class, “member1”); Team team = member.getTeam(); // 객체 그래프 탐색 System.out.println(“팀 이름 = “ + team.getName());
- JPQL
- 객체 그래프 탐색
- 수정
Team team2 = new Team(“team2”, “팀2”); em.persist(team2); Member member = em.find(Member.class, “member1”); Member.setTeam(team2);
- 삭제
member1.setTeam(null); //회원1 연관관계 제거 member2.setTeam(null); //회원2 연관관계 제거 em.remove(team); //팀 삭제
양방향 매핑 엔티티의 양방향 연관관계로 설정하면 객체의 참조는 둘인데 외래 키는 하나다.
회원 -> 팀(Member.team) 방향
class Member {
@ManyToOne
@JoinColumn(name=”TEAM_ID”)
private Team team;
…
}
팀 -> 회원(Team.members) 방향
class Team {
@OneToMany(mappedBy=”team”) //MappedBy 속성의 값은 연관관계의 주인인 Member.team
private List<Member> members = new ArrayList<Member>();
}
양방향의 장점은 반대방향으로 객체 그래프 탐색 기능이 추가된 것 뿐이다.
출처 : 자바 ORM 표준 JPA 프로그래밍 김영한 지음