Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- s
- Graph
- 혼자 공부하는 C언어
- buffer
- list 컬렉션
- Serialization
- stream
- 윤성우의 열혈 자료구조
- C 언어 코딩 도장
- insertion sort
- 이것이 자바다
- datastructure
- C programming
- JSON
- 메모리구조
- Selection Sorting
- 윤성우 열혈자료구조
- coding test
- 이스케이프 문자
- Algorithm
- 알기쉬운 알고리즘
- Stack
- R
Archives
- Today
- Total
Engineering Note
[JPA] 연관관계 주인 본문
연관관계 주인
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);
}
'Server > JPA ORM' 카테고리의 다른 글
[JPA] 기본 키 매핑 방법 (0) | 2025.10.08 |
---|---|
[JPA] JPA 동작 원리 중요 개념 정리(영속성 컨텍스트 생명주기와 더티체킹) (0) | 2025.10.06 |
[JPA] 영속성 컨텍스트 생명주기와 @Transacional의 동작 원리: 영속성 컨텍스트 유지 (0) | 2025.10.05 |
[JPA] 영속성 전이와 고아객체 제거 (0) | 2025.09.14 |
[JPA] JPA save 쿼리메소드 실행시 내부 동작 흐름 정리 (0) | 2025.09.14 |
Comments