해결된 질문
작성
·
5.1K
0
@SpringBootTest
@Transactional
public class QuerydslTest {
@Autowired
MemberRepository memberRepository;
@Test
public void dynamic_BooleanBuilder() {
String username = null;
int age = 10;
List<Member> members = memberRepository.searchMemberAll(username, age);
for (Member member : members) {
System.out.println("member = " + member);
}
}
}
MemberRepository를 만들어서
동적쿼리를 테스트하려고 했는데
C:\study\querydsl\querydsl\src\main\java\study\querydsl\repository\MemberRepository.java:21:56
java: variable em might not have been initialized오류가 떴습니다.
@Repository
@RequiredArgsConstructor
public class MemberRepository {
private final EntityManager em;
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
public List<Member> searchMemberAll(String username, Integer age) {
BooleanBuilder booleanBuilder = new BooleanBuilder();
if (username != null) {
booleanBuilder.and(member.username.eq(username));
}
if (age != null) {
booleanBuilder.and(member.age.eq(age));
}
return queryFactory.selectFrom(member).where(booleanBuilder).fetch();
}
}
어디가 문제일까요 ?
@RequiredArgsConstructor로
em을 초기화했다고 생각하는데.. ;;
답변 1
1
앗 해결했습니다.
@Bean으로 등록해서 주입받아야 하는거군요 :]
뭔가 그래도 처음엔 될 거라 생각했었는데..
애플리케이션 초기화 순서가
변수부터 있는 값을 넣은 후,
영속성컨텍스트에 있는 @Bean이 주입돼서
JPAQueryFactory queryFactory = new JPAQueryFactory(em); 시점에 오류가 나나봐요.
em이 아직 주입받기 전이니까.
맞겠죠 ?
강의 더 들으면서 @Bean 방식 말고도
다른 방식으로 쓰는 것도 보게됐어요 감사합니다.
생성자를 활용하겠습니다! 감사합니다 :]
//
혹시 다른 분도 이거에 대해 찾고 계시면
순수 JPA 리포지토리와 Querydsl 강의 10:48초부터 보시면 됩니다 :]
네 스스로 잘 해결하셨습니다^^
참고로 생성자를 활용해주세요. 감사합니다.