연관관계 맵핑3(양방향 연관관계, 연관관계의 주인-주의점)

Mina Park·2022년 9월 3일
0

양방향 맵핑시 주의점

📌 1. 연관관계의 주인에 반드시 값을 입력

  • 연관관계의 주인만이 외래키 값 변경이 가능하기 때문

    사실 순수 객체 관점에서는 주인 & 역방향 모두에 값을 입력하는 것이 안전

			TeamMapping team = new TeamMapping();
            team.setName("teamA");
            em.persist(team);

            MemberMapping member = new MemberMapping();
            member.setUsername("member1");
           
            //연관관계 주인쪽 값 입력(외래키 관리)
            member.setTeam(team);
            //역방향에도 값 입력(저장시 사용되지 X)
            team.getMembers().add(member);
           
            
            em.persist(member);

📌 2. 연관관계 편의 메소드 사용

  • 주인&역방향에 값을 입력하도록 각각 호출하다보면 누락되는 실수 방지
  • 하나의 메소드로 양방향 관계를 모두 설정하도록 변경
  • 작성시 getter,setter와 구분될 수 있도록 네이밍
	TeamMapping team = new TeamMapping();
    team.setName("teamA");
    em.persist(team);

    MemberMapping member = new MemberMapping();
    member.setUsername("member1");
            
    //편의 메소드는 주인 & 역방향 둘 중 하나 택1하여 사용
	member.changeTeam (team); //** 주인쪽 값 입력 => 연관관계 편의 메소드
    team.addMember(member); //** 역방향 값 입력 => 연관관계 편의 메소드
            
    em.persist(member);
	- (1)주인쪽 연관관계 편의 메소드	
	 	public void changeTeam(TeamMapping team) {
 		this.team = team;
        team.getMembers().add(this); 
   		}
	- (2)역방향 연관관계 편의 메소드	
	 	public void addMember(MemberMapping member) {
        member.setTeam(this);
        members.add(member);
  		}

📌 3. 무한루프 조심

  • toString(), lombok, JSON 생성 라이브러리
    • controller에서 엔티티 자체를 반환하지 말고 왠만하면 dto로 변환해서 반환

0개의 댓글