문제 상황


@Override
public Long findBySimplePostIdAsSubCommentId(Long subCommentId) {
	Long findSimplePostId = queryFactory
		.select(simplePost.id)
		.from(simplePost)
		.join(simplePost.fullPost, fullPost)
		.join(fullPost.mainComments, mainComment)
		.join(mainComment.subComments, subComment)
		.where(subComment.id.eq(subCommentId))
		.fetchOne();
	return findSimplePostId;
}

위 코드를 실행시켰더니 fetchOne에서 에러가 발생했다. 에러 내용은 하나의 값을 가져와야 하는데 두 개 이상의 값이 발견되어 발생한 에러이다.

알고보니 initDB에 simplePost를 여러 개 만든 다음 하나의 FullPost로 연결했기에 발생한 오류이다. join할 때 MainComment는 FullPost foreign key를 가지고 있기에 여러 개로 복사된 FullPost에 전부 MainComment가 붙은 것이다.

맨 처음 QueryDSL 문제인줄 알고 쿼리 뜯어보고 쿼리가 이상한지 확인하려고 h2 console로 두드려봐도 문제 없어서 엔티티 연결도 확인하고 별 짓을 다 했는데 허허,,