java - Hibernate 中的半正矢公式 - Spring

标签 java mysql spring hibernate jakarta-ee

半正矢公式

SELECT 
   id, 
  (3959 * acos(cos(radians(37)) * cos(radians(lat)) * cos(radians(lng) 
    - radians(-122)) + sin(radians(37)) * sin(radians(lat)))) AS distance 
FROM markers 
HAVING distance < 25 
ORDER BY distance LIMIT 0 , 20

我尝试使用 Hibernate 编写:

String query = "SELECT *, ( 3959 * acos( cos( radians(?) ) * cos( radians( Vehicle.lat ) ) * cos( radians( Vehicle.lng ) - radians(-?) ) + sin( radians(37) ) * sin( radians( Vehicle.lat ) ) ) ) AS distance FROM VehicleDetails Vehicle HAVING distance < 25 ORDER BY distance LIMIT 0 , 20";

Object[] params  = {lat,lng};

List<VehicleDetails> vehicledata = getHibernateTemplate().find(query,params);

Exception: org.hibernate.hql.ast.QuerySyntaxException:

最佳答案

如果没有group by子句,则不需要having子句,可以使用where。我相信错误是由于第一个选择中的 * 引起的,您可能需要重写为

SELECT Vehicle.*, ( 3959 * acos( cos( radians(?) ) * cos( radians( Vehicle.lat ) ) * cos( radians( Vehicle.lng ) - radians(-?) ) + sin( radians(37) ) * sin( radians( Vehicle.lat ) ) ) ) AS distance FROM VehicleDetails Vehicle where distance < 25 ORDER BY distance LIMIT 0 , 20"

关于java - Hibernate 中的半正矢公式 - Spring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29776452/

相关文章:

mysql - 如果第一次更新执行成功则执行第二次更新

java - SpringFramework jsp设置限制JAVA url

java - IntelliJ : Getting Spring+Gradle+JUnit project to work within IDE

mysql - ODBC 3.51 驱动程序无法连接到本地主机上的 MySQL 服务器 (10061)

java - 在java中打开和关闭mp3文件

mysql - 如何在 MYSQL 中使用 SELECT 子查询而不是 View ?

java - Tomcat Server 7 的 Spring Maven Webapp 错误

spring - 错误 mvn tomcat :run but can execute in eclipse tomcat

java - 使用带有 Oracle 数据库上的绑定(bind)变量的PreparedStatement 来触发查询

java - 需要将第一个对象的字段复制到第二个对象中