
@Entity
public class Member {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
@Column(name = "USERNAME")
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;
}
객체지향에서 연관관계를 가지기 위해서는 상대 테이블에 대한 레퍼런스가 있어야 한다. 위의 코드를 살펴보면 Member와 Team 의 관계가 1:N 일때, Member 객체에는 FK(TEAM_ID)를 필드로 지니고 있다.

위는 TeamA를 저장하고, TeamA에 소속된 member1 을 저장하는 코드이다.
물론 저장은 잘 되지만 문제는 member.setTeamId(team.getId()) 부분이다.
누가 멤버를 저장할때 Id를 얻어와서 저장하겠는가, 일반적으로는 팀 이름을 함께 넣어서 저장할 것이다.

위의 문제뿐 아니라 내가 특정 멤버의 팀을 알아보기 위해서도 위와같이 여러과정을 거쳐야하는 번거로움이 존재한다. 이는 적절한 연관관계를 지니지 못했기 때문에 생기는 문제이다.

DB의 패러다임과 객체지향의 패러다임이 다르기에 이런 문제가 발생한다.

다시 이 테이블을 보고, 아래 코드를 참고해보자.