Spring JPA查询无法识别空间类型

问题描述 投票:0回答:1

我正在尝试使用Spacial数据类型通过Spring JPA Query注释发出本地查询请求。当要求通过控制台甚至在数据库中执行查询时,查询将完美运行。但是当他被要求通过Spring使用时。有人知道我在做什么错吗?还是有一种更好的方法来获得相同的结果(将所有计算留给数据库一边)?预先谢谢你

这是我要执行的查询。再次,它通过控制台工作,但无法通过spring boot请求执行]

@Query(value = "SELECT TOP 1 * FROM Vehicles v " +
            "JOIN Bikelots l ON l.BikeLotId = v.BikeLotId " +
            "JOIN BikeTypes b ON b.BikeTypeId = l.BikeTypeId " +
            "WHERE b.BikeTypeId = ?1 " +
            "ORDER BY " +
            "Geography::STGeomFromText(v.Point.MakeValid().STAsText(),4326) " +
            ".STDistance(Geography::STGeomFromText(Geometry::Point(?2,?3,4326).MakeValid().STAsText(),4326)) "
            , nativeQuery = true)
com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near 'Geography:'.

我在application.properties中使用此方言

spring.jpa.database-platform=org.hibernate.spatial.dialect.sqlserver.SqlServer2008SpatialDialect
java spring-boot jpa geometry sql-server-2017
1个回答
0
投票

给定的错误是由于jpa休眠将字符“:”识别为即将到来的变量的占位符。

通过将查询放置在String变量中,然后在每个“:”之前添加“ \\”,并将字符串分配给@Query的值,解决了该问题。例如查看代码

String query = "SELECT TOP 1 * FROM Vehicles v " +
        "JOIN Bikelots l ON l.BikeLotId = v.BikeLotId " +
        "JOIN BikeTypes b ON b.BikeTypeId = l.BikeTypeId " +
        "WHERE b.BikeTypeId = ?1 " +
        "ORDER BY " +
        "Geography\\:\\:STGeomFromText(v.Point.MakeValid().STAsText(),4326) " +
        ".STDistance(Geography\\:\\:STGeomFromText(Geometry\\:\\:Point(?2,?3,4326).MakeValid().STAsText(),4326)) ";
    @Query(value = query, nativeQuery = true)

© www.soinside.com 2019 - 2024. All rights reserved.