Java hibernate 5-将postgis数据插入表中
我使用hibernate spatial 5.2.10和postgis,并尝试将点数据类型持久化到DB表中,该表由两列组成: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;
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_拓扑扩展,然后将“点”数据类型更改为“几何体”数据类型。