IT/JPA
연관관계 사용
WsCode
2022. 5. 29. 21:58
연관관계를 등록, 수정, 삭제, 조회 하는 예제를 통해 연관관계를 어떻게 사용하는지 알아보겠습니다.
1. 저장
연관관계를 매핑한 엔티티를 어떻게 저장하는지 아래의 코드로 알아보겠습니다.
public class TestSave {
public static void main(String[] args) {
EntityManagerFactory emf =
Persistence.createEntityManagerFactory("jpa-study");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
try {
tx.begin();
// 비즈니스 로직 시작
// 팀1 저장
Team team = new Team("team1", "팀1");
em.persist(team);
// 회원1 저장
Member member1 = new Member("member1", "회원1");
member1.setTeam(team); // 연관관계 설정 : member1 -> team1
em.persist(member1);
// 회원2 저장
Member member2 = new Member("member2", "회원2");
member2.setTeam(team); // 연관관계 설정 : member2 -> team1
em.persist(member2);
tx.commit();
}
catch (Exception e) {
tx.rollback();
}
}
}
JPA에서 엔티티를 저장할 때 연관된 모든 엔티티는 영속 상태여야합니다.
중요한 부분을 분석해보겠습니다.
member1.setTeam(team); // 연관관계 설정 : member1 -> team1
em.persist(member1);
회원 엔티티는 팀 엔티티를 참조하고 저장했습니다.
JPA는 참조한 팀의 식별자(Team.id) 를 외래 키로 사용해서 적절한 등록 쿼리를 생성하였습니다.
이때 실행된 SQL은 다음과 같습니다.
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')