inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

JPA @Query 로는 동적쿼리 작성은 불가능한가요?

1069

henry

작성한 질문수 9

0

QueryDSL로는 구현이 어려워, 네이티브 쿼리를 작성하려고 합니다.

그런데, where 조건을 동적으로 작성해야하는데... @Query의 경우 동적쿼리가 불가능한가요?

스프링부트 jpa

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
henry님, JPA에서 @Query 어노테이션을 이용한 쿼리는 기본적으로 정적 쿼리입니다. 즉, 실행 시점에 쿼리의 구조가 변경될 수 없어서 동적 쿼리를 직접 작성하는 것은 불가능합니다. 그래서 동적 쿼리가 필요한 경우는 주로 QueryDSL 같은 라이브러리를 사용하게 됩니다.

하지만, 만약 QueryDSL을 사용하기 어려운 상황이라면, @Query의 nativeQuery 옵션을 사용하여 네이티브 SQL을 작성하는 방법이 있습니다. 이 경우 동적 쿼리를 직접 작성하기 위해 문자열 조합 등을 사용할 수 있지만, 이는 권장되지 않는 방법입니다. 코드의 가독성이 떨어지고 유지보수하기 어렵기 때문입니다.

대신에, 동적 쿼리의 필요성이 큰 경우에는 QueryDSL 외에도, JPA의 Criteria API를 고려해볼 수 있습니다. Criteria API는 타입 안전성을 제공하며, 복잡한 동적 쿼리를 프로그래매틱하게 구성할 수 있게 도와줍니다.

또 다른 방법으로는, 조건에 따라 분기를 나누어 여러 개의 @Query를 작성하는 것도 하나의 해결책이 될 수 있습니다. 각각의 쿼리에서 다른 WHERE 조건을 사용하여 상황에 맞는 쿼리를 선택적으로 실행할 수 있습니다.

이외에도 복잡한 동적 쿼리가 필요할 때는, 리포지토리에 사용자 정의 메소드를 구현하여 직접 EntityManager를 사용하는 방법도 있습니다. 이를 통해 JPQL 또는 네이티브 쿼리를 동적으로 생성하고 실행할 수 있습니다.

리프레시토큰

0

22

1

로그인 확인

0

62

3

서비스에서와 컨트롤러의 @Vaild 적용 차이에 대해서

0

60

2

해결했습니다

0

45

1

지금 강의가 어려우신분 추천드립니다.

0

70

1

기존의 완성된 CRUD의 Build.gradle에 security관련 dependency를 추가하면 문제가 생깁니다.

0

72

2

EmailSender 관련 문의

0

65

1

CRA ? 질문입니다

0

63

1

[해결됨]마지막 강의 내용 수정 화면이 기능을 못하네요.

0

58

1

[해결됨]부분적으로 화면 이동이 안되는 부분이 있습니다.

0

85

6

aws 계정 생성 질문

1

87

1

조회 메서드 네이밍 질문

0

79

1

음성불량

0

57

1

장애 격리 관련해서 궁금한 부분이 있어요

0

66

2

질문있습니다.

0

59

1

코드 깃허브는 없을까요?

1

75

2

핵사고날 아키텍처 기반으로 멀티 모듈 설계 시 질문드립니다..

0

82

2

인넬리제이 무료버전

0

78

2

Post, PostEntity에서 User, UserEntity 의존

0

66

1

내부 객체 직접 접근에 관하여.

0

114

2

CertificationServiceTest

0

63

1

FlushModeType.COMMIT (12:45) 예시코드 질문

0

73

1

readme에 대한 자료는 따로 받아볼수 있나요?

0

107

2

InvalidCurriculumException DIP 적용 여부 문의

0

89

2