【发布时间】:2020-11-01 12:13:03
【问题描述】:
我想使用原生查询实现具有计算距离的消息的投影
@Entity
@Table(name= "messages")
data class Message(
@Id
@GeneratedValue
var id: Int?=null,
var message: String,
var userName: String,
var location: Point? = null
)
我的投影界面
interface FoundMessage {
var id: Int
var message: String
var location: Point
var userName: String
var distance: Float
}
我的仓库
interface MessageRepository : CrudRepository<Message, Int> {
@Query(
"SELECT id,message,location,user_name as \"userName\", st_distance(messages.location,ST_SetSRID(st_makepoint(:#{#currentPos.x},:#{#currentPos.y}),4326)) AS \"distance\"" +
"FROM messages WHERE location && st_makeenvelope(:#{#llb.x}, :#{#llb.y}, :#{#urt.x}, :#{#urt.y}, 4326) ORDER BY distance DESC", nativeQuery = true)
fun findByLocationWithinBoundingBoxOrderByDistance(@Param("llb") llb: Point,
@Param("urt") urt: Point,
@Param("currentPos") currentPos: Point): List<FoundMessage>
}
一旦我从本机查询中删除位置,一切正常,并且位置在我的投影中为空。 如果我返回我的实体列表而不是投影接口,我的本机查询也可以正常工作。 所以问题是,如果我使用投影接口,hibernate 无法创建“org.locationtech.jts.geom.Point”。
任何想法如何解决它? 还是不同的方法?
BR
【问题讨论】:
标签: spring-boot kotlin postgis hibernate-spatial