단방향 연관관계

  1. 다대일

Member 클래스

@ManyToOne // 다대일(N:1) 관계라는 매핑 정보
@JoinColumn(name=TEAM_ID) // 조인 컬럼은 외래 키를 매핑할 때 사용
private Team team;

@JoinColumn

속성

name 매핑할 외래 키 이름
referencedColumnName 외래 키가 참조하는 대상 테이블의 컬럼명
foreignKey(DDL) 외래 키 제약조건을 직접 지정할 수 있다. 테이블을 생성할 때만 사용

@OneToOne : 일대일 관계


연관관계 사용

  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 member = em.find(Member.class, member1);
      Team team = member.getTeam(); // 객체 그래프 탐색
      System.out.println( 이름 =  + team.getName());
      
    • JPQL
  3. 수정
    Team team2 = new Team(team2, 팀2);
    em.persist(team2);
    Member member = em.find(Member.class, member1);
    Member.setTeam(team2);
    
  4. 삭제
    member1.setTeam(null); //회원1 연관관계 제거
    member2.setTeam(null); //회원2 연관관계 제거
    em.remove(team);	      //팀 삭제
    

양방향 매핑 엔티티의 양방향 연관관계로 설정하면 객체의 참조는 둘인데 외래 키는 하나다.

회원 -> 팀(Member.team) 방향

class Member {
    @ManyToOne
    @JoinColumn(name=TEAM_ID)
    private Team team;
    
}

팀 -> 회원(Team.members) 방향

class Team {
    @OneToMany(mappedBy=team)  //MappedBy 속성의 값은 연관관계의 주인인 Member.team
    private List<Member> members = new ArrayList<Member>();
}

양방향의 장점은 반대방향으로 객체 그래프 탐색 기능이 추가된 것 뿐이다.


출처 : 자바 ORM 표준 JPA 프로그래밍 김영한 지음