🚀 연관관계 사용

1. 저장

JPA에서 엔티티를 저장할 때 연관된 모든 엔티티는 영속 상태여야 한다.

//회원과 팀을 저장public void testSave(){    //팀1 저장    Team team1 = new Team("team1", "팀1");    em.persist(team1);    //회원1 저장    Member member1 = new Member("member1", "회원1");    member1.setTeam(team1); //연관관계 설정 member1 -> team1    em.persist(member1);    //회원2 저장    Member member2 = new Member("member2", "회원2");    member2.setTeam(team); //연관관계 설정 member2 -> team1    em.persist(member2);}

JPA는 참조하는 팀의 식별자(Team.id)를 외래키로 사용해서 적절한 등록 쿼리를 생성한다.

INSERT INTO TEAM (TEAM_ID, NAME) VALUES ('team1', '팀1');--외래키 값으로 탐조한 팀의 식별자가 입력됨INSERT INTO MEMBER (MEMBER_ID, NAME, TEAM_ID)VALUES ('member1', '회원1', 'team1');INSERT INTO MEMBER (MEMBER_ID, NAME, TEAM_ID)VALUES ('member2', '회원2', 'team1');

2. 조회

3. 수정

//연관관계를 수정(em.update()같은 메소드 없음!)private static void updateRelation(EntityManager em){    //새로운 팀2    Team team2 = new Team("team2","팀2");    em.persist(team2);    Member member = em.find(Member.class, "member1");    member.setTeam(team2);}

엔티티의 값만 변경해두면 트랜잭션을 커밋할 때 플러시가 일어나면서 변경 감지 기능이 작동되고 DB에 자동으로 반영한다.

4. 연관관계 제거

//연관관계를 삭제private static void deleteRelation(EntityManager em){    Member member1 = em.find(Member.class, "member1");    member1.setTeam(null); //연관관계 제거}

5. 연관된 엔티티 삭제