Home 연관관계 주요 내용 및 주의할점
Post
Cancel

연관관계 주요 내용 및 주의할점

단방향 연관관계 주의점

등록 주의점

1
2
3
4
5
6
7
8
public void tset(){
  Team team=new Team("team","팀");
  em.persist(team);

  Member member=new Member("member","회원");
  member.setTeam(team);
  em.persist(member);
  }
  • 반드시 저장할 때 연관된 모든 엔티티는 영속 상태여야 한다.

삭제 주의점

1
2
3
4
5
public void test(){
  //...
  member.setTeam(null);
  em.remove(member);
  }
  • 삭제를 할때 연관관계를 제거하고 삭제를 하지 않으면 외래 키 제약조건으로 인해, 데이터베이스 오류가 발생하기 때문에 제거하고 삭제해야 한다.

양방향 연관관계의 주의점

저장 주의점

  • 엔티티를 저장할 때 연관관계 양쪽 모두 관계를 맺어주어야 한다.
  • 각각 메서드를 통해 설정할 수 있지만 연관관계 주인쪽에서 메서드를 리팩토링해서 쓰는 방법도 있다.
  • 방법 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    public class Member {
      @ManyToOne
      @JoinColumn("team_id")
      private Team team;
      //...
      public void setTeam(Team team) {
        if (this.team != null) {
          this.team.getMembers().remove(this);
        }
        this.team = team;
        team.getMembers().add(this);
      }
    }
    
    public class Team {
      @OneToMany
      private List<Member> members;
      //...
      public List<Member> getMembers() {
        return members;
      }
    }
    

일대다 단방향 매핑 단점

  • 일대다 단방향 매핑의 단점은 매핑한 객체가 관리하는 외래 키가 다른 테이블에 있다는 점이다.
  • 본인 테이블에 외캐 키가 있으면 INSERT SQL 한번이면 되지만, 다른 테이블에 외래 키가 있을경우 추가적인 UPDATE SQL을 추가로 실행해야 한다.
  • 해결방법 : 양방향으로 매핑하면 된다.

일대일 단방향

  • 일대일 단방향은 JPA에서 지원하지 않는다.
This post is licensed under CC BY 4.0 by the author.