QueryDSL을 의존성에 추가하였다면,
JPAQueryFactory를 빈으로 사용할 수 있도록 설정해 주어야 한다.
abstract class QueryDslSupport {
@PersistenceContext
protected lateinit var entityManager: EntityManager
protected val queryFactory: JPAQueryFactory
get() {
return JPAQueryFactory(entityManager)
}
}
기존에는 UserRepository가 JpaRepository를 상속하고 끝이었는데
제법 특이한 구조로 바뀐다.
#CardRepository
interface CardRepository : JpaRepository <CardEntity, Long>, CustomCardRepository {
fun findByAuthor(author: String) : List<CardEntity>
}
#CustomCardRepository
interface CustomCardRepository {
fun searchCardListByTitle(title: String) : List<CardEntity>
fun searchCardListByComplete(isCompleted: Boolean) : List<CardEntity>
fun findByPageableAndComplete (pageable: Pageable, courseComplete: Complete?): Page<CardEntity>
}
위 코드를 보면 CardRepository가 JpaRepository와 CustomCardRepository를 상속받는 것이 보인다.
왜 이렇게 하는가?
1) CardRepository가 JpaRepository를 그대로 사용하고
2) CustomCardRepository의 내용을 추가로 사용하기 위함이다.
CardRepository에서 CustomCardRepository를 상속받지 않고
그대로 내용만 추가해서 사용하게 된다면
Impl에서 JpaRepository를 싹 다 구현해서 써야되는 참사가 일어난다.