용어 이해
- 방향 : 단방향, 양방향
- 다중성 : 다대일, 다대다, 일대다, 일대일 ..
- 연관관계 주인 : 객체 양방향 연관관계는 관리 주인이 필요
객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것
객체를 테이블에 맞추어 데이터 중심으로 모델링 한다면, 협력관계를 만들 수 없다.
테이블을 외래 키로만 조회해서 찾는다면, 협력관계를 만들 수 없을 것
객체의 참조와 테이블의 외래키를 매핑한다.
예제 ) 멤버 가 팀에 소속이 된다.
public class Member {
@ManyToOne
@JoinColumn(name="TEAM_ID")
private Team team
}
Team teamA = new Team()
member.setTeam(teamA)
반대 방향으로 객체 그래프를 탐색한다.
= 반대 쪽 team에서도 members 를 관리해줘야한다.
public class Team {
@OneToMany(mappedBy ="team")
List<Member> members = new ArrayList<Member>();
}
객체는 연관관계가 2개 지만 테이블의 연관관계는 1개이다.
members 는 테이블에는 존재하지 않는다.
즉 테이블은 외래키 하나로 두 테이블의 연관관계를 관리한다.
객체의 두 관계 중 하나를 연관관계의 주인으로 지정한다.
이 주인이 외래 키를 관리한다.
주인이 아닌 쪽은 읽기만 가능하다.
mappedBy
속성으로 주인을 지정한다.
주인은 웬만하면 1:다 에서 다
를 기준으로 정해라
순수 객체 상태를 고려해서 항상 양쪽에 값을 설정하자
연관관계 편의 메소드를 생성하자
toString() 이나 JSON 생성 라이브러리를 사용할때 무한 루프 조심
단방향 매핑만 하면 이미 완료기 때문에 필요할 때 양방향을 추가해주자