Hibernate Spatial 4 และ PostGIS 2.0


10

ฉันมีปัญหาบางอย่างในการรวมเทคโนโลยีเหล่านี้:

  • Hibernate Spatial 4.0-M1
  • PostGIS 2.0.2 (ด้วย JDBC 2.0.2 ที่คอมไพล์แล้ว)
  • ไฮเบอร์เนต 4.1.1

ข้อผิดพลาดเฉพาะคือ:

Caused by: org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of org.postgis.PGgeometry. Use setObject() with an explicit Types value to specify the type to use.

หมายเหตุประกอบเอนทิตีคือ:

@NotNull
@Column(columnDefinition="Geometry")
@Type(type="org.hibernate.spatial.GeometryType")
private Point geom;

และตัวอย่างการสร้างจุดคือ:

Location location = new Location();
WKTReader fromText = new WKTReader();
Point geom = null;
try {
    geom = (Point) fromText.read("POINT(-56.2564083434446 -34.8982159791812)");
} catch (ParseException e) {
    throw new RuntimeException("Not a WKT string:" + "SRID=4326;POINT(-56.2564083434446 -34.8982159791812)");
}
if (!geom.getGeometryType().equals("Point")) {
    throw new RuntimeException("Geometry must be a point. Got a " + geom.getGeometryType());
}
location.setGeom(geom);
locationDAO.insert(location);

คำตอบ:


5

ฉันกำลังใช้ Tomcat และเป็นสิ่งอำนวยความสะดวกในการเชื่อมต่อ ฉันเพียงแค่สัมผัสแหล่งข้อมูลเพื่อการประยุกต์ใช้ของฉันผ่าน JNDI

นี่คือสิ่งที่ทำงานให้ฉัน:

  • เมื่อฉันรวมการพึ่งพา Maven สำหรับการจำศีล - อวกาศมันมีการพึ่งพาสกรรมกริยาสำหรับการจำศีลเอง, jdbc ของ Postgresql และ jdbc ของ Postgis ดังนั้นสิ่งที่ฉันทำคือการลบการอ้างอิงเหล่านี้ (ล้าสมัย) ปอมของฉันดูเหมือนว่า:
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-spatial</artifactId>
    <version>4.0</version>
    <exclusions>
        <exclusion>
            <artifactId>hibernate-core</artifactId>
            <groupId>org.hibernate</groupId>
        </exclusion>
        <exclusion>
            <artifactId>postgis-jdbc</artifactId>
            <groupId>org.postgis</groupId>
        </exclusion>
        <exclusion>
            <artifactId>postgresql</artifactId>
            <groupId>postgresql</groupId>
        </exclusion>
    </exclusions>
</dependency>

Postgis jdbc เป็นส่วนเสริมของ postgresql jdbc ที่คุณต้องการ

  • จากนั้นฉันโคลนที่เก็บ postgisและรวบรวมส่วนขยาย jdbc ของพวกเขา เพียงแค่เรียกใช้mvn packageในjava/jdbcไดเรกทอรี อ่าน readme ของมัน
  • จากนั้นฉันวาง postgresql-jdbc ล่าสุดและ postgis jdbc ที่คอมไพล์ล่าสุดลงในlibไดเรกทอรีของ tomcat
  • กับการกำหนดค่าเซิร์ฟเวอร์คราวของผมเปลี่ยน URL jdbc:postgresql_postGIS://localhost:5432/mydatabaseฐานข้อมูลเพื่อ สังเกตpostgresql_postGISส่วนที่ org.postgis.DriverWrapperฉันยังมีการเปลี่ยนแปลงระดับคนขับรถ นี่เป็น wrapper ที่ลงทะเบียนชนิด postgis ด้วย jdbc ดั้งเดิม

นี่คือการกำหนดค่าทรัพยากรขั้นสุดท้ายของฉันในคราวที่:

<Resource auth="Container"
          maxActive="120" maxIdle="10" name="jdbc/myapp"
          username="myuser" password="mypassword"
          poolPreparedStatements="true" type="javax.sql.DataSource" 
          driverClassName="org.postgis.DriverWrapper"
          validatingQuery="select 1"
          url="jdbc:postgresql_postGIS://localhost:5432/myapp"/>

โดยทั่วไปขั้นตอนนี้จะอธิบายไว้ใน README ของ postgis jdbc เพื่อให้แน่ใจว่าคุณอ่านมัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.