작성
·
202
0
안녕하세요,
[메소드 이름으로 쿼리 생성 메소드] 강의 중 메소드 이름을 분석해서 JPQL 쿼리 실행 부분에 질문이 있습니다.
예를 들어 findByUsernameAndEmail()과 같이 이름을 정의하였을 때, 내부적으로 SQL을 어떻게 생성하는지 궁금합니다.
'자바 ORM 표준 JPA 기본편' 강의에서 em.persist()를 실행하면 영속성 컨텍스트 내부에서 SQL을 생성하고, SQL 쓰기 지연 저장소에 저장하는 것을 설명해주셨습니다. 즉, 컴파일 시점이 아닌, 런타임 시점 동적으로 쿼리를 생성하는 것으로 이해하였습니다.
위에서 말씀 드린 findByUsernameAndEmail()과 같은 경우 jpql로 변환되어서 쿼리가 실행된다고 말씀해주셨습니다. 어떠한 방법을 통해, 내부적으로 어떠한 로직을 거쳐 런타임에 jpql로 변환이 될 수 있는지 궁금합니다.
감사합니다.
답변 1
1
안녕하세요. yoongdoo0819님
실행하는 메서드의 이름과 파라미터 타입, 반환 타입등의 정보를 읽어서 JPQL을 생성해서 실행한다고 보시면 됩니다. 생각해보면 이런 정보만 알고 있으면 해당 문자등을 파싱해서 원하는 JPQL이든 SQL이든 만들어낼 수 가 있습니다.
자바에서는 리플렉션 같은 기술들이 있기 때문에 생각보다 어렵지 않게 메서드의 이름과 파라미터 정보 등을 읽어낼 수 있습니다. 관련해서 리플렉션으로 검색해보시면 도움이 되실거에요.
감사합니다.