Engineering Note

[JPA] 연관관계 주인 본문

Server/JPA ORM

[JPA] 연관관계 주인

Software Engineer Kim 2025. 10. 10. 01:01

연관관계 주인
JPA에서 양방향 관계로 Entity가 있을 때 외래키를 관리해줄 주인을 정해주어야 한다. JPA는 연관관계의 주인이 어떤 Entity라고 지정하지 않고 연관관계 주인이 아니라는 의미로 'mapped by' 옵션으로 외래키를 관리 하지 않는다고 지정한다.

Book과 BookStore 엔티티를 예시로 생각해볼 수 있다. Book과 BookStores는 다대일 관계고, 양방향으로 세팅을 해주었다.

 

Book Entity

@Entity
@Getter @Setter
public class Book {
    @Id
    @GeneratedValue
    private Long id;

    private String isbn;
    private String title;

    @ManyToOne
    private BookStore bookStore;
}

 

 

@Getter @Setter
@Entity
public class BookStore {
    @Id
    @GeneratedValue
    private Long id;

    private String name;

    @OneToMany(mappedBy = "bookStore")
    private Set<Book> books = new HashSet<>();

    public void addBook(Book book){
        this.books.add(book);
        book.setBookStore(this);
    }
}

 

 

이때 addBook 메서드를 보면, Book을 매개변수로 받아서, BookStore 자기 자신을 가리키는 this로 books 필드에 book을 추가하고, book.setBookStore(this); 를 통해 연관관계 편의 메서드를 정의하고 있다. 

이때 외래키를 세팅해주는 코드는 this.books.add(book); 이 아니라 book.setBookStore(this);이다. Book이 연관관계 주인이기 때문에 외래키를 관리할 수 있다. 

만야 addBook 메서드가 아래처럼 this.books.add(book);만 있었다면 외래키는 세팅 되지 않는다. BookStore는 연관관계의 주인이 아니기 때문이다.

 

  public void addBook(Book book){
        this.books.add(book);
    }
Comments