【问题标题】:Hibernate Query to find distance between two points休眠查询以查找两点之间的距离
【发布时间】:2015-03-15 08:08:34
【问题描述】:

我可以使用 -

找到距离
String hqlQuery = "SELECT *, (6371 * 2 * ASIN(SQRT(POWER(SIN((:ulatitude - abs(phy_1)) * pi()/180 / 2),2) +" +
                     "COS(:ulatitude * pi()/180 ) * COS(abs(phy_1) * pi()/180) *" +
                     "POWER(SIN((:ulongitude - phy_2) * pi()/180 / 2), 2)))) as d " +
                     "FROM location l HAVING distance < 10 ORDER BY d";
            Query query = getSession().createSQLQuery(hqlQuery);


            query.setParameter("ulatitude", latitude);
            query.setParameter("ulongitude", longitude);
            return query.list();

问题是我的模型不包含作为字段的距离。而且我无法弄清楚- 1.如何将其更改为适当的 HQL 而不是使用 SQL 查询。 2.如何返回这个附加参数距离d,因为距离不是我模型中location的字段。

我试过了 -

String hql = "from location where (SELECT (6371 * 2 * ASIN(SQRT(POWER(SIN((:ulatitude - abs(phy_1)) * pi()/180 / 2),2) +" +
                     "COS(:ulatitude * pi()/180 ) * COS(abs(phy_1) * pi()/180) *" +
                     "POWER(SIN((:ulongitude - phy_2) * pi()/180 / 2), 2))))) < 10";

Query query = getSession().createQuery(hql);

但它给出了以下错误-

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected end of subtree

【问题讨论】:

    标签: hibernate spring-mvc hql


    【解决方案1】:

    我能够摆脱跟随 -

    String hql= "from location c where (6371 * 2 * ASIN(SQRT(POWER(SIN((:ulatitude - abs(c.phy_!)) * pi()/180 / 2),2) +" +
                         "COS(:ulatitude * pi()/180 ) * COS(abs(c.phy_1) * pi()/180) *" +
                         "POWER(SIN((:ulongitude - c.phy_2) * pi()/180 / 2), 2)))) < 10";
    

    【讨论】:

      猜你喜欢
      • 2019-09-16
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-20
      • 2012-06-20
      相关资源
      最近更新 更多