좀더 객체 지향적인 설계가 어떻게 되는지 알아보자. 아주 어려우니 집중하자

용어이해

방향 : 단방향, 양방향

다중성 : 다대일, 일대다, 일대일, 다대다 이해

연관관계의 주인 : 객체 양방향 연관관계는 관리 주인이 필요(두 객체 연관관계 중 하나를 정해서 테이블의 외래키를 관리해야 하는데 이것을 연관관계의 주인)

객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다.

예상시나리오

회원과 팀이 있다.

회원은 하나의 팀에만 소속될 수 있다.

회원과 팀은 다대일 관계다.

Untitled

멤버와 팀을 동시에 등록하고 싶은경우 팀을 만들고 persist를 통해 id를 받고 이를 다시 가져와서 멤버 객체에 넣고 persist를 해야한다. 상당히 귀찮고 객체지향스럽지 않다.

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

Member member = new Member();
member.setUesrname("member1");
member.setTeamId(team.getId()); // 요게 상당히 애매하다. 외래키 식별자를 직접 다루는 상황
em.persist(member)

// 조회하는 경우도 상당히 불편해진다.
Member member = em.find(Member.class, member.getId());
Long findTeamId = findMember.getTeamId();
Team findTeam = em.find(Team.class, findTeamId());

결론적으로 테이블에 맞추어 데이터 중심으로 모델링하면, 협력관계를 만들 수 없다.