legacy/JPA

[JPA] Spring Data Jpa 쿼리문, ClassCastException 예외

heemang_e 2023. 7. 17. 17:52

 

jpa로 쿼리문을 작성하는데 자꾸 예외가 터졌는데 조금 헤맸다.

 

잘못된 쿼리문

Optional<LoanHistory> existsByBookNameAndUserIdAndIsReturn
	(String bookName, Long userId, boolean isReturn);

난 위의 쿼리문이 다음과 같은 SQL문을 기대했고 LoanHistory 객체가 반환될 것이라 생각했다.

SELECT * FROM loan_history WHERE book_name = ? 
		AND user_id = ? AND is_return = ?

 

근데 아래와 같이 ClassCastException 예외가 터졌다.

Boolean 타입이 LoanHistory 타입으로 타입 변환이 안 된다고 한다.

Spring Data Jpa에서 exists 쿼리문은 boolean 타입을 반환한다. 나는 객체를 반환받기 기대했으니 역시 예외가 터질 수밖에 없다.

 

수정된 코드

exists -> find 로 변경하면 된다. find의 경우에는 객체를 반환한다.

Optional<LoanHistory> findByBookNameAndUserIdAndIsReturn
		(String bookName, Long userId, boolean isReturn);

결론

아래를 참고하자!

인프런 최태현님 강의