연관관계 외래 키 업데이트
// 1. DB에서 조회한 Team
Team foundTeam = entityManager.find(Team.class, 1L);
// 2. DB에서 조회하지 않은 Team
Team team = new Team();
team.setId(1L);
// 연관관계 저장 (CREATE)
Member member = new Member();
member.setTeam(team);
entityManager.persist(member);
// 연관관계 변경 (UPDATE)
Member foundMember = entityManager.find(Member.class, 100L);
foundMember.setTeam(team);
- JPA에선 Entity에 연관관계인 객체를 저장하거나 불러오지만, 실제 DB 테이블에는 외래 키만 저장되어있다
- Member 객체에 연관관계인 Team 객체를 저장하거나 변경하면 DB 테이블에 반영되는 시점엔 Team의 ID만 저장된다
- DB에서 조회한 Team 객체를 그대로 Member 객체에 저장해도 되지만, Team ID(Primary Key)를 이미 알고 있다면 비영속 상태인 Team 객체를 새로 만들어서 ID만 세팅한 뒤 Member 객체에 저장해도 된다
- 새로 만든 비영속 Team 객체를 Member 객체에 저장하면 ID를 제외한 필드는 어떤 값을 세팅하더라도 Team 테이블에 영향을 미치지 않으며, Team ID만 Member 테이블의 외래 키로 저장된다
- DB 쿼리는 네트워크를 사용하기 때문에 최소화해야 성능을 향상시킬 수 있으며, Team ID를 이미 알고 있다면 굳이 DB에서 쿼리해서 Member 객체에 저장할 필요 없이 비영속 Entity를 새로 만들어서 저장한다
'JPA' 카테고리의 다른 글
[JPA 11] 연관관계 - @OneToOne (0) | 2022.03.10 |
---|---|
[JPA 10] 연관관계 - 연관관계 매핑 편의성 (0) | 2022.03.10 |
[JPA 8] 연관관계 - 방향성 (0) | 2022.03.10 |
[JPA 7] 연관관계 - @OneToMany (0) | 2022.03.10 |
[JPA 6] 연관관계 - @ManyToOne (0) | 2022.03.10 |