Querydsl
private Member getMember(Long memberId) {
return jpaQueryFactory
.selectFrom(member).distinct()
.leftJoin(member.groupMember, groupMember).fetchJoin()
.leftJoin(groupMember.group, group).fetchJoin()
.where(member.id.eq(memberId))
.fetchFirst();
}
Member Entity의 코드이다.
// Member.class
@Column(name = "email", nullable = false, unique = true)
private String email;
@Column(name = "name", nullable = false)
private String name;
@Column(name = "password", nullable = false)
private String password;
@OneToMany(mappedBy = "member", fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST})
private List<GroupMember> groupMember = new ArrayList<>();
기본적으로 One에서 Many를 조회 할 때, fetch를 쓰는 경우 limit이 적용되지 않는다고 한다.
갑자기 단건 조회인데 웬 limit을 언급하는가?
그 이유는 fetchFirst() 가 단 건 조회를 할 때 사용되지만, 동작하는 코드를 보면 다음과 같다.
@Override
public final T fetchFirst() {
return limit(1).fetchOne();
}
limit 을 추가로 한 뒤에, fetchOne()을 통해서 단 건을 가져온다.
Member (one)에서 GroupMember (Many) 를 조회할 때 무언가 fetch를 할 경우 무언가 문제가 발생한다고 한다.
우선은 급히 fetchFirst() 를 fetchOne() 으로 변경해서 해결을 했다.
출처입니다. 해당 글을 보고 이해하고 해결을 했습니다.
글이 너무 똑같아서 봤더니 동일한 작성자였습니다.
https://javabom.tistory.com/104
https://tecoble.techcourse.co.kr/post/2020-10-21-jpa-fetch-join-paging/
'Back-End > JPA' 카테고리의 다른 글
JPA 연관관계 양방향 매핑 Entity 조회시 문제&해결 (0) | 2022.04.28 |
---|---|
JPA) deleteById 호출 시 연관객체 SQL 줄이기 (0) | 2022.04.01 |
JPA) 벌크 연산 (0) | 2022.03.30 |
JPA) Join Fetch, @EntityGraph 차이점 (0) | 2022.03.24 |
JPA) Spring OSIV (0) | 2022.03.14 |