✅양방향 매핑시 가장 많이 하는 실수

(연관관계의 주인에 값을 입력하지 않음)

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

Member member = new Member();
member.setName("member1");

//역방향(주인이 아닌 방향)만 연관관계 설정
team.getMembers().add(member);
em.persist(member);

Untitled

✅⭐양방향 매핑시 연관관계의 주인에 값을 입력해야 한다.

(순수한 객체 관계를 고려하면 항상 양쪽다 값을 입력해야 한다.)

→ 안그러면 영속성 컨텍스트에서 1차 캐시에 담기지 않는다. ( 또 test case 작성할 때도 문제 생김 )

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

team.getMembers().add(member); 

//연관관계의 주인에 값 설정
**member.setTeam(team); //****
em.persist(member);

Untitled

✅ 양방향 연관관계 주의 - 실습

mport javax.persistence.*;
import java.util.Date;

@Entity
public class Member {

    @Id @GeneratedValue
    @Column(name = "MEMBER_ID")
    private Long id;
    @Column(name = "USERNAME")
    private String username;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "TEAM_ID")
    private Team team;

   public Team getTeam() {
        return team;
    }

// 연관관계 편의 메소드 (양쪽에 다 값 세팅 할 수 있다)
    **public void changeTeam(Team team) {
        this.team = team;
        team.getMembers().add(this);
    }**

엔티티를 api에 반환해버리면 나중에 api 스펙이 바뀌어버림! 그래서 DTO로 변환해서 반환해라!