我正在尝试使用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
给定的错误是由于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)