Closed mkroo closed 2 months ago
@mkroo 안녕하세요.
ST_DISTANCE_SPHERE
는 DB 함수로 보입니다. customExpression은 JPQL을 직접 랜더링하기 위한 메소드로 DB 함수를 호출하기 위해 만들어지지 않았습니다.
그래서 function을 사용하는 것을 추천드립니다. 그리고 DB 함수의 경우 방언에 등록되어 있지 않으면 Hibernate가 반환타입을 추측할 수 없어 Object로 타입을 유추했다고 여겨집니다.
Hibernate를 사용하실 경우 FunctionContributor를 이용해 함수의 정보를 등록해주시면 정상적으로 동작하지 않을까 예상하고 있습니다.
FunctionContributor
를 등록하여 타입이 정상적으로 캐스팅되지 않는 이슈를 해결하였습니다
customExpression과 function의 용도에 대한 가이드도 감사합니다 🙇
안녕하세요, Select new를 통해 DTO projection을 할 때 Custom expression(
distanceFrom
)을 통해 반환되는 값이java.lang.Object
이기 때문에 projection이 불가하다는 오류가 발생하지만 실제로 디버깅하엿을 때에는 Double 클래스로 캐스팅되는것으로 보여 문의드립니다.Projection을 하려는 data class에서 로그를 찍어 캐스팅되는 클래스를 확인해보았을 때에는 kotlin의 Double 클래스로 반환되는것을 확인하였으나 실제 오류메세지에서는
java.lang.Object
로 보이는것을 확인하였습니다.부연 설명이 필요한 부분이 있다면 말씀 부탁드립니다!
좋은 라이브러리를 오픈소스로 제공해주셔서 감사합니다 :)
Case 1. Alias를 통해 필드의 이름을 지정해주었을 때의 오류 메세지
아래의 오류메세지는 필드이름이 있지만 projection class에서 distance필드에 Double로 매핑되는 값이 없어 나는것으로 추측하였습니다
Case 2. Alias를 제거하였을 때의 오류 메세지
작성한 코드
쿼리
Custom DSL
Projection을 하는 data class