JPA Named Query показывает ошибку

0

Я пытаюсь выполнить JPA с именем query на моей сущности, но он показывает синтаксическую ошибку. Может ли кто-нибудь сказать мне, в чем проблема с моим именованным запросом?

@Repository
public interface CollegeRepository extends CrudRepository<CollegeEntity, Integer> {


    @Query("SELECT c FROM(SELECT *,(((acos(sin((:latitude * pi()/180)) * sin((latitude*pi()/180))+cos((:latitude * pi()/180)) * cos((latitude*pi()/180)) * cos(((:longitude - longitude)*pi()/180))))*180/pi())*60*1.1515*1.609344) as distance FROM college) t WHERE distance <= 30")
    List<CollegeEntity> getCollegeByLocation(@Param("latitude") Double latitude, @Param("longitude") Double longitude, @Param("distance") Integer distance);    
}

Это ошибка после выполнения запроса выше.

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: ( near line 1, column 14 [SELECT c FROM(SELECT *,(((acos(sin((:latitude * pi()/180)) * sin((latitude*pi()/180))+cos((:latitude * pi()/180)) * cos((latitude*pi()/180)) * cos(((:longitude - longitude)*pi()/180))))*180/pi())*60*1.1515*1.609344) as distance FROM college) t WHERE distance <= :distance]

Когда я выполняю ниже собственный запрос в терминале MySQL, тогда работаю хорошо.

mysql> SELECT * FROM(SELECT *,(((acos(sin((0.0 * pi()/180)) * sin((latitude*pi()/180))+cos((0.0 * pi()/180)) * cos((latitude*pi()/180)) * cos(((0.0 - longitude)*pi()/180))))*180/pi())*60*1.1515*1.609344) as distance FROM college) t WHERE distance <= 30;
Empty set (0.08 sec)
  • 0
    У пользователя есть 2 опубликованных запроса, и он не говорит, к какому из них они относятся, и что такое «синтаксическая ошибка». Также нет никакого JPA "именованного запроса" там. У вас есть 2 SPRING DATA JPA запросов
  • 0
    Извините, я отредактирую свой вопрос.
Показать ещё 4 комментария
Теги:
spring
spring-data-jpa

1 ответ

1
Лучший ответ

Кажется, что ваш запрос не является правильным синтаксисом JPQL, потому что в JPA нет функций acos, pi, sin, cod, ваш запрос выглядит как родной запрос, чтобы решить вашу проблему, у вас есть два варианта:

  • Первый вариант. Преобразуйте свой запрос в правильный синтаксис JPQL, вы можете следить за документацией
  • Второй вариант: используйте nativeQuery = true @Query(nativeQuery = true, value="SELECT * FROM(..."), обратите внимание, что * в вашем запросе нет псевдонима c.

Ты можешь использовать:

@Query(value = "SELECT * FROM(SELECT *,"
        + "(((acos(sin((0.0 * pi()/180)) * sin((latitude*pi()/180)) + "
        + "cos((0.0 * pi()/180)) * cos((latitude*pi()/180)) * "
        + "cos(((0.0 - longitude)*pi()/180))))*180/pi()) * "
        + "60*1.1515*1.609344) as distance FROM college) t WHERE distance <= 30;", 
        nativeQuery = true)

В вашем случае я настоятельно рекомендую второй вариант.

  • 0
    Я использовал второй вариант, но при этом отображается ошибка «Invalid MemberValuePair». Любое предложение?
  • 0
    @SagarYadav Вы можете отредактировать свой вопрос и добавить полную ошибку, кроме акцента на одной ошибке на вопрос, пожалуйста,
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню