【问题标题】:No Dialect mapping for JDBC type: 1111 when selecting "org.locationtech.jts.geom.Point" in native queryJDBC 类型没有方言映射:在本机查询中选择“org.locationtech.jts.geom.Point”时出现 1111
【发布时间】: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


    【解决方案1】:

    “无方言映射”消息通常表示您没有配置正确的方言。您需要为空间类型注册 JDBC 映射的 SpatialDialect。检查日志消息。您应该会看到一个 Dialect,其名称中包含“Spatial”一词。

    Spring-Boot 的问题在于它会尝试自动为您的数据库找出合适的Dialect。但它不会选择SpatialDialect。您必须手动配置它。

    【讨论】:

      猜你喜欢
      • 2018-03-08
      • 2015-03-27
      • 1970-01-01
      • 2014-07-18
      • 2018-12-04
      • 1970-01-01
      相关资源
      最近更新 更多