🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

java: variable em might not have been initialized 오류

21.11.15 09:45 작성 조회수 4.25k

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

질문자

2021.11.15

앗 해결했습니다. 

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

 

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

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

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

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

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

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

맞겠죠 ?

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

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

relate16님의 프로필

relate16

질문자

2021.11.17

 

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

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

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

 

//

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

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

채널톡 아이콘