@OneToMany(mappedBy = "author", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
이는 Spring과 JPA에서 엔티티 간의 관계를 설정할 때 사용되는 개념이다.
[1] @OneToMany 개념
: @OneToMany는 하나의 엔티티가 여러 개의 다른 엔티티와 연결될 때 사용하는 애너테이션이다.
- 예를 들어, 하나의 User(사용자)는 여러 개의 Post(게시물)를 작성할 수 있다.
-> 따라서 User와 Post는 1 대 N 관계다. 즉, 한 명의 사용자가 여러 개의 게시물을 가질 수 있다는 것을 나타낸다.
[2] mappedBy = "author"
: mappedBy는 두 엔티티가 서로 관계를 맺을 때, 어느 쪽이 주도권을 가지는지를 나타낸다.
- 여기서 mappedBy = "author"는 Post 엔티티가 관계의 주도권을 가진다는 뜻입니다. 즉, Post 클래스의 author라는 필드에 의해 관계가 설정된다.
-> 간단히 말해, User 클래스에서는 Post가 주도하는 관계를 참고하고 있다는 의미다.
[3] cascade = CascadeType.ALL
: cascade는 한 엔티티에서 발생한 변화가 연관된 다른 엔티티에도 영향을 미치는 방식을 정의한다.
- CascadeType.ALL은 모든 종류의 변화(저장, 삭제, 수정 등)가 연관된 엔티티에도 적용된다는 뜻이다.
1) 예시
- User가 삭제되면 그와 관련된 모든 Post도 자동으로 삭제된다.
- User가 저장되면, 그와 연관된 Post들도 자동으로 저장된다.
-> 즉, CascadeType.ALL은 부모-자식 관계에서 부모(User)의 행동이 자식(Post)에게도 적용된다는 뜻이다.
[4] fetch = FetchType.LAZY
: fetch는 데이터를 가져오는 방식을 나타낸다.
- LAZY(지연 로딩)는 필요할 때만 데이터를 가져오는 방식이다.
1) 예시
- 사용자가 게시글을 많이 작성했다면, 사용자의 정보를 조회할 때 그 게시글 정보도 함께 불러오는 것은 시간이 오래 걸릴 수 있다.
-> LAZY 설정을 통해 게시글 정보는 실제로 필요할 때만 불러온다.
- 반대로 EAGER(즉시 로딩)는 사용자 정보를 불러올 때, 연관된 게시글 정보도 즉시 함께 불러오는 방식이다.
[5] 요약
@OneToMany(mappedBy = "author", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
- @OneToMany: 한 명의 User는 여러 개의 Post를 가질 수 있다.
- mappedBy = "author": Post 엔티티의 author 필드가 관계의 주도권을 가진다.
- cascade = CascadeType.ALL: User의 변화가 연관된 Post에도 모두 적용된다.
- fetch = FetchType.LAZY: Post 정보는 필요할 때만 불러온다.
-> 이 설정은 엔티티 간의 관계를 효과적으로 관리하면서 성능을 최적화하고, 연관된 데이터를 쉽게 조작할 수 있도록 돕는다.