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



我正在尝试使用空间数据类型通过 spring JPA 查询注释发出本机查询请求。 当要求通过控制台甚至数据库执行时,查询可以完美运行。 但是当他被要求通过春天使用时。 有谁知道我做错了什么?或者有更好的方法来达到相同的结果(将所有计算都放在数据库一边(? 提前谢谢你

这是我尝试执行的查询。同样,它通过控制台工作,但无法通过 spring 启动请求执行

@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

给定的错误是由于 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)

最新更新