Java hibernate 5-将postgis数据插入表中

Java hibernate 5-将postgis数据插入表中,java,postgresql,hibernate,postgis,hibernate-spatial,Java,Postgresql,Hibernate,Postgis,Hibernate Spatial,我使用hibernate spatial 5.2.10和postgis,并尝试将点数据类型持久化到DB表中,该表由两列组成: name=uid,type=bigint(主键,非空) 名称=中心,类型=点 这是我的密码: import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.GeometryFactory; import com.vividsolutions.jts.geom.Point;

我使用hibernate spatial 5.2.10和postgis,并尝试将点数据类型持久化到DB表中,该表由两列组成:

  • name=uid,type=bigint(主键,非空)
  • 名称=中心,类型=点
  • 这是我的密码:

    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.postgresql.Driver
    org.hibernate.spatical.dialen.postgis.postgispg95方言
    真的
    jdbc:postgresql://127.0.0.1:2345/gis_sandbox
    ****
    ****
    java:comp/UserTransaction
    
    当我运行上面的代码时,我得到以下消息:

    错误org.hibernate.engine.jdbc.spi.SqlExceptionHelper-错误:列“center”的类型为point,但表达式的类型为bytea


    如何将点数据类型插入此表?

    -检查它是否有用谢谢。对我有用的是:添加postgis和postgis_拓扑扩展,然后将“点”数据类型更改为“几何体”数据类型。-检查它是否有用谢谢。对我有用的是:添加postgis和postgis_拓扑扩展,然后将“点”数据类型更改为“几何体”数据类型。