-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
pet 도메인 지연 로딩 설정 및 N+1 문제 해결 #586
Comments
1. as-is1.1. findById() Pet 도메인은 Member와 ManyToOne 관계, 기존에는 fetch 전략이 Eager로 설정되어 있었음. Hibernate:
select
p1_0.id,
p1_0.birth_date,
p1_0.description,
p1_0.gender,
p1_0.image_url,
p1_0.member_id,
m1_0.id,
m1_0.image_url,
m1_0.name,
m1_0.tag,
p1_0.name,
p1_0.size_type
from
pet p1_0
join
member m1_0
on m1_0.id=p1_0.member_id
where
p1_0.id=? 1.2. findByMemberId()
Hibernate:
select
p1_0.id,
p1_0.birth_date,
p1_0.description,
p1_0.gender,
p1_0.image_url,
p1_0.member_id,
p1_0.name,
p1_0.size_type
from
pet p1_0
where
p1_0.member_id=?
Hibernate: # N+1
select
m1_0.id,
m1_0.image_url,
m1_0.name,
m1_0.tag
from
member m1_0
where
m1_0.id=? 2. to-be
@Entity
public class Pet {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(nullable = false)
private Member member;
}
1.1. findById() @Query("""
SELECT p
FROM Pet p
JOIN FETCH p.member m
WHERE p.id = :id
""")
Optional<Pet> findById(Long id); select
p1_0.id,
p1_0.birth_date,
p1_0.description,
p1_0.gender,
p1_0.image_url,
p1_0.member_id,
m1_0.id,
m1_0.image_url,
m1_0.name,
m1_0.tag,
p1_0.name,
p1_0.size_type
from
pet p1_0
join
member m1_0
on m1_0.id=p1_0.member_id
where
p1_0.id=? 1.2. findByMemberId() @Query("""
SELECT p
FROM Pet p
JOIN FETCH p.member m
WHERE m.id = :memberId
""")
List<Pet> findByMemberId(Long memberId); select
p1_0.id,
p1_0.birth_date,
p1_0.description,
p1_0.gender,
p1_0.image_url,
p1_0.member_id,
m1_0.id,
m1_0.image_url,
m1_0.name,
m1_0.tag,
p1_0.name,
p1_0.size_type
from
pet p1_0
join
member m1_0
on m1_0.id=p1_0.member_id
where
p1_0.member_id=? |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
요구 사항
The text was updated successfully, but these errors were encountered: