JTS — Hibernate + Postgres + конфликт UUID

Я использую Hibernate 5.0 + Postgres 9.4.

Мои объекты используют UUIDs в качестве идентификатора.

В проекте также используется hibernate-spatial.

Свойство id аннотируется просто как

@Id
@GeneratedValue
private UUID id;

После сохранения любого объекта (не только с геометрическими данными) я получаю следующую ошибку:

column "id" is of type geometry but expression is of type uuid

Похоже, есть некоторый конфликт в сопоставлении типов со мной; хотя я не эксперт по сопоставлению типов Hibernate.

Есть ли кто-нибудь, кто может помочь мне преодолеть эту проблему?


person Stefano Cazzola    schedule 19.11.2016    source источник
comment
Какой тип столбца ID в базе данных?   -  person SubOptimal    schedule 19.11.2016
comment
@SubOptimal Он создается как geometry, потому что и UUID, и Geometry сопоставляются с java.sql.Types.OTHER   -  person Stefano Cazzola    schedule 19.11.2016
comment
Вы имеете в виду, что у вас есть CREATE TABLE some_table (id geometry, ...) и теперь вы хотите сопоставить с ним UUID?   -  person SubOptimal    schedule 21.11.2016
comment
@SubOptimal Нет. Схема (в режиме разработки) была создана Hibernate. Пока я не добавил пространственную интеграцию (hibernate-spatial:5.0.7), поля UUID были созданы правильно как pg-uuid. После добавления пространственного материала отображение изменилось из-за того, что и java.util.UUID, и com.vividsolutions.Geometry отображаются на java.sql.Types.OTHER. Теперь проблема заключается в том, как обойти этот конфликт отображения.   -  person Stefano Cazzola    schedule 23.11.2016
comment
Возможно, это может быть решение stackoverflow.com /вопросы/4495233/.   -  person SubOptimal    schedule 24.11.2016
comment
@SubOptimal да, на самом деле это решение (отсюда и +1). Хотя у него есть пара недостатков: 1. Сущности осведомлены о Hibernate; 2. Сущности зависят от базы данных. Оптимальным результатом было бы повторное использование всех объектов с разными ORM и разными СУБД. Я работаю над этим уже несколько часов, и единственное решение, которое я нашел, - это рассматривать UUID как строки (что не очень эффективно)   -  person Stefano Cazzola    schedule 25.11.2016


Ответы (1)


Ознакомьтесь с этим ответом и исходным тема обсуждения

Указание columnDefinition = "uuid" решило для меня точно такую ​​же проблему.

@Entity
public class MyEntity {
    @Id
    @GeneratedValue
    @Column( columnDefinition = "uuid", updatable = false )
    public UUID getId() {
        return id;
    }
}
person Johnny Doe    schedule 13.04.2017