Không gian ngủ đông 4 và PostGIS 2.0


10

Tôi đang gặp một số vấn đề khi tích hợp các công nghệ này:

  • Không gian ngủ đông 4.0-M1
  • PostGIS 2.0.2 (với JDBC 2.0.2 được biên dịch)
  • Ngủ đông 4.1.1

Lỗi cụ thể là:

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.

Chú thích thực thể là:

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

Và ví dụ tạo điểm là:

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);

Câu trả lời:


5

Tôi đã sử dụng Tomcat và đó là cơ sở kết nối. Tôi vừa tiếp xúc với một nguồn dữ liệu cho ứng dụng của mình thông qua JNDI .

Đây là những gì đã làm việc cho tôi:

  • Khi tôi bao gồm phụ thuộc maven cho hibernate-spatial, nó có một phụ thuộc bắc cầu cho chính hibernate, jdbc của postgresql và jdbc của postgis. Vì vậy, những gì tôi đã làm là để loại bỏ những phụ thuộc này (lỗi thời). Pom của tôi trông như thế này:
<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 là phần mở rộng cho postgresql jdbc mà bạn cần.

  • Sau đó, tôi nhân bản kho lưu trữ postgis và biên dịch phần mở rộng jdbc của họ. Chỉ cần chạy mvn packagetrong java/jdbcthư mục. Đọc readme của nó.
  • Sau đó, tôi đã đặt postgresql-jdbc gần đây nhất và postgis jdbc được biên dịch gần đây trong libthư mục của tomcat
  • Trên cấu hình máy chủ của tomcat, tôi đã thay đổi url cơ sở dữ liệu thành jdbc:postgresql_postGIS://localhost:5432/mydatabase. Chú ý postgresql_postGISmột phần. Tôi cũng đổi lớp tài xế thành org.postgis.DriverWrapper. Đây là một trình bao bọc đăng ký các loại postgis với jdbc riêng.

Đây là cấu hình tài nguyên cuối cùng của tôi trong tomcat:

<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"/>

Quy trình này thường được mô tả trong README của postgis jdbc. Vì vậy, hãy chắc chắn rằng bạn đọc nó .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.