首页 > 解决方案 > Spring data jdbc:如何使用来自 org.springframework.data.geo 包的 Point

问题描述

我有一个实体

public class Arena {
    @Id
    private final Long id;
    @Embedded(onEmpty = Embedded.OnEmpty.USE_NULL)
    final Point location;
}

点来自org.springframework.data.geo

和它的 Postgres 模式

CREATE TABLE arena
(
    id                 SERIAL                       NOT NULL
        CONSTRAINT arena_pk
            PRIMARY KEY,
    location           POINT
);

当我尝试通过 spring data jdbc 存储库(arenaRepository.findAll())使用实体时

public interface ArenaRepository extends CrudRepository<Arena, Long> {
}

我收到一个错误

请求处理失败;嵌套异常是 org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; 错误的 SQL 语法 [SELECT arena.id AS id, arena.y AS y, arena.x AS x FROM arena]; 嵌套异常是 org.postgresql.util.PSQLException:错误:列 arena.y 不存在

我看到 SQL 与架构不匹配。但是是否可以通过 Spring Data Jdbc 使用“geo”类?

我尝试将位置介绍为列表并且它有效。这是正确的方法吗?

标签: spring-data-jdbc

解决方案


您可以注释包含org.springframework.data.geo.Pointwith的字段@Embedded。这会将其映射到两列xy.

我目前看不到将其映射到 PostgresPoint列的方法。当然没有任何特别的支持。


推荐阅读