인프런 커뮤니티 질문&답변

relate16님의 프로필 이미지

작성한 질문수

실전! Querydsl

동적 쿼리 - BooleanBuilder 사용

java: variable em might not have been initialized 오류

해결된 질문

작성

·

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

relate16님의 프로필 이미지
relate16
질문자

앗 해결했습니다. 

@Bean으로 등록해서 주입받아야 하는거군요 :]

 

뭔가 그래도 처음엔 될 거라 생각했었는데..

애플리케이션 초기화 순서가 

변수부터 있는 값을 넣은 후, 

영속성컨텍스트에 있는 @Bean이 주입돼서

JPAQueryFactory queryFactory = new JPAQueryFactory(em); 시점에 오류가 나나봐요.

em이 아직 주입받기 전이니까.

맞겠죠 ?

김영한님의 프로필 이미지
김영한
지식공유자

네 스스로 잘 해결하셨습니다^^

참고로 생성자를 활용해주세요. 감사합니다.

relate16님의 프로필 이미지
relate16
질문자

 

강의 더 들으면서 @Bean 방식 말고도

다른 방식으로 쓰는 것도 보게됐어요 감사합니다.

생성자를 활용하겠습니다! 감사합니다 :]

 

//

혹시 다른 분도 이거에 대해 찾고 계시면 

순수 JPA 리포지토리와 Querydsl 강의 10:48초부터 보시면 됩니다 :]

relate16님의 프로필 이미지

작성한 질문수

질문하기