Spring data jdbc: как использовать Point из пакета org.springframework.data.geo

У меня есть сущность

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
);

когда я пытаюсь использовать объект через репозиторий jdbc данных spring (arenaRepository.findAll ())

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

Я получаю ошибку

Ошибка обработки запроса; вложенное исключение - org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; неправильная грамматика SQL [ВЫБЕРИТЕ arena.id AS id, arena.y AS y, arena.x AS x FROM arena]; вложенное исключение - org.postgresql.util.PSQLException: ОШИБКА: столбец arena.y не существует

Я вижу, что SQL не соответствует схеме. Но можно ли работать с гео-классами через Spring Data Jdbc?

Я попытался представить местоположение как список, и он работает. Это правильный путь?


person Pavel Varchenko    schedule 02.03.2020    source источник


Ответы (1)


Вы можете аннотировать поле, содержащее org.springframework.data.geo.Point, с помощью @Embedded. Это сопоставит его с двумя столбцами x и y.

В настоящее время я не вижу способа сопоставить его со столбцом Postgres Point. Никакой особой поддержки для этого, конечно же, нет.

person Jens Schauder    schedule 03.03.2020
comment
Я думаю, то же самое верно и для MySQL Point? - person Ira Re; 20.04.2021