[JPA] 연관관계 편의 메소드

2023. 11. 6. 13:25
728x90

기초개념

1) 단방향 : 한 쪽이 반대쪽을 참조하는 관계 

    양방향 : 서로가 참조하는 관계

 

2) 연관관계의 주인

  • 연관관계는 FK로 관리
  • 양방향 관계 -> 양쪽에서 매핑 -> 관리하는 주인이 필요 -> 이것이 연관관계의 주인
  • 보통은 FK를 갖고 있는 엔터티가 연관관계의 주인~! (주로 n쪽)  (ex. 자동차-바퀴 > 바퀴가 n이므로 주인) 

 

** @ManyToOne (다대일 매핑)  /  @OneToMany (일대다 매핑)   양방향 매핑

예시 : Book과 Image로 하겠다.  Book : Image = 1: n

1) Images (다대일)

@ManyToOne
@JoinColumn
private Books books;

 

2) Books  (일대다) 

: 주인이 아닌 쪽에 mappedBy속성을 넣어 매핑되는 컬럼명을 기입해서 양방향 관계를 설정한다. (주인이 아님을 명시)

@OneToMany(mappedBy = "books")
private List<Images> images = new ArrayList<>();

 

** @OneToOne 일대일 매핑

: 이 땐 FK를 어디에 둬도 상관없으나, 더 많이 쓰는 테이블에 FK를 넣음.

그리고 똑같이 mappedBy 설정을 넣어줘서 주인이 아님을 명시하면 된다. 

 

 

연관관계 편의 메서드

-> 이것도 하나의 메서드에서 양측 관계를 설정해주어야 한다. (setter 사용할 수 밖에....) 

-> 연관관계의 주인과 상관없이 자주 쓰는 쪽에 메서드를 정의해주는게 좋음. 

 

위의 예시 이어서 Books와 Images 중 더 자주 쓰는 쪽은...?  => Books 

그러면 Books에서 메서드를 정의해주면 된다. 

 

@Entity
@Table(name="books")
@Getter
public class Books {
	@Id
    @GeneratedValue
    private Long id;
    
    @OneToMany(mappedBy="books", cascade=CascadeType.ALL)
    private List<Images> images = new ArrayList<>();
    
    ...
    
     // 연관관계 메서드
    public void addImage(Images image) {
        images.add(image);
        image.setBooks(this);
    }
}

 

요렇게 메서드를 만들어주면 한쪽에서 이미지 추가 하면 다른 쪽에도 자동으로 추가가 된다는 이야기...(?)

728x90

BELATED ARTICLES

more