JPA

[JPA 9] 연관관계 - 저장, 변경

snowkit 2022. 3. 10. 20:59

연관관계 외래 키 업데이트

// 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