我正在尝试在Spring MVC Repository类中运行以下代码,以找到最近的Garda站(警察局)到客户端用户输入的纬度和经度值。在下面的代码中,| grep --color=auto \bRedundancy\w*\b(?<!Full)\|\bHealth\w*\b(?<!Ok)
和:latitude
表示用户输入,:longitude
和g.gardaStation_longitude
表示存储在数据库中的工作站的lat long值。
g.gardaStation_latitude
但是,在查询中使用'g'会导致错误。我之前在很多查询中都包含了别名,并且没有看到过这样的错误?
static final String HAVERSINE_PART = "(6371 * acos(cos(radians(:latitude)) * cos(radians(g.gardaStation_latitude)) * cos(radians(g.gardaStation_longitude) - radians(:longitude)) + sin(radians(:latitude)) * sin(radians(g.gardaStation_latitude))))";
@Query(value = "SELECT g FROM garda_station g ORDER BY "+HAVERSINE_PART+" DESC LIMIT 1", nativeQuery = true)
public GardaStation findByGardaStation_LatitudeAndGardaStation_Longitude(@Param("latitude") final double latitude, @Param("longitude") final double longitude);
错误的完整记录
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'g' in 'field list'
答案 0 :(得分:1)
SELECT g FROM garda_station g
不是 native SQL的正确语法,而对JPQL/HQL
来说是正确的。您只给出了一个表别名,您应该列出列,因此它可以是g.*
或单个列名。在这种情况下g.*
,因为您将结果映射到实体。
答案 1 :(得分:0)
在SELECT子句中,您需要列出要包含在结果中的字段。这些将是您希望包含在结果中的garda_station表中的列。如果你想看到所有的字段,你可以&#34; SELECT * FROM garda_station&#34;。 由于您将garda_station表别名为g,因此您可以在列中添加&#34; g。&#34;,例如&#34; SELECT g。* FROM garda_station&#34;。 由于g不是列的名称,因此&#34; SELECT g&#34;会导致错误。