hibernate 5 - вставить данные postgis в таблицу

Я работаю с hibernate-spatial 5.2.10 и postgis и пытаюсь сохранить тип данных Point в таблице БД, состоящей из двух столбцов:

  1. имя = uid, тип = bigint (первичный ключ, а не нуль)
  2. имя = центр, тип = точка

Вот мой код:

import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.Point;
import org.hibernate.Session;
... 

public class TestGIS {

  @Test
  public void testSavePosition() {
    StandardServiceRegistry standardRegistry =
        new StandardServiceRegistryBuilder().configure("hibernate.gis-test.cfg.xml").build();
    Metadata metadata =
    new MetadataSources(standardRegistry).addAnnotatedClass(Position.class)
                                         .getMetadataBuilder()
                                         .build();
    SessionFactory sessionFactory = metadata.getSessionFactoryBuilder().build();
    Session session = sessionFactory.openSession();
    session.beginTransaction();
    GeometryFactory factory = new GeometryFactory();
    Position position = new Position(1, factory.createPoint(new Coordinate(10.0, 20.0)));
    session.persist(position);
    session.flush();
    session.close();
    sessionFactory.close();
  }

  @Entity
  @Table(name = "positions")
  public static class Position {

    @Id
    @Column
    private long uid;

    @Column
    private Point center;

    public Position(long uid, Point center) {
      this.uid = uid;
      this.center = center;
    }

    public Position() {
    }

    // getters and setters

  }
}

и вот код конфигурации:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

  <!-- a SessionFactory instance listed as /jndi/name -->
  <session-factory
      name="java:hibernate/SessionFactory">

    <!-- properties -->
    <property name="connection.driver_class">org.postgresql.Driver</property>
    <property name="dialect">org.hibernate.spatial.dialect.postgis.PostgisPG95Dialect</property>
    <property name="show_sql">true</property>
    <property name="connection.url">jdbc:postgresql://127.0.0.1:2345/gis_sandbox</property>
    <property name="connection.username">****</property>
    <property name="connection.password">****</property>
    <property name="jta.UserTransaction">java:comp/UserTransaction</property>

  </session-factory>


</hibernate-configuration>

Когда я запускаю код выше, я получаю этот массаж:

ОШИБКА org.hibernate.engine.jdbc.spi.SqlExceptionHelper — ОШИБКА: столбец "center" имеет тип point, но выражение имеет тип bytea

Как мне вставить тип данных Point в эту таблицу?


person Shimrit    schedule 11.06.2017    source источник
comment
stackoverflow.com/questions/40327188/ - проверьте, полезно ли это   -  person Srini    schedule 11.06.2017
comment
Спасибо. что сработало для меня, так это: добавить расширения postgis и postgis_topology, а затем изменить тип данных точки на тип данных геометрии.   -  person Shimrit    schedule 11.06.2017