PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Không tìm thấy Kết nối Oracle khi kết nối PostGIS được xác định

Như đã nhận xét, tôi thấy rằng Hibernate sẽ mặc định là spatialDialect sẽ là spatialDialect đầu tiên mà nó tìm thấy từ cái có sẵn, và trong trường hợp đó là Oracle, mặc dù bất cứ điều gì đã được chỉ định trong Persence.xml.

Cách giải quyết đầu tiên mà tôi tìm thấy là chú thích trong thực thể mà đối với GeometryUserType, tôi sẽ sử dụng phương ngữ Postgis như trong:

@TypeDefs({@TypeDef(name="org.hibernatespatial.GeometryUserType", 
        parameters={@org.hibernate.annotations.Parameter(name="dialect",value="org.hibernatespatial.postgis.PostgisDialect")},
        typeClass=org.hibernatespatial.GeometryUserType.class)})

Điều đó sẽ buộc Hibernate sử dụng Postgis cho thực thể đó.

Cách giải quyết thứ hai, phù hợp hơn với tôi (tôi cần có thể định cấu hình điều này và sử dụng các phương ngữ khác nhau cho một thực thể tùy thuộc vào đơn vị duy trì và môi trường) là sử dụng tệp ánh xạ trong đơn vị duy trì.

<persistence-unit name="persistence_unit_name" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>jta_data_source_name</jta-data-source>
    <mapping-file>${hibernate.mappingfile}</mapping-file>
    <class>(...)</class>

Trong tệp pom của tôi, tôi sẽ tạo tệp ánh xạ đó thành tệp mà tôi cần, sử dụng các cấu hình và biến Maven.

<hibernate.mappingfile>oracle.hbm.xml</hibernate.mappingfile>

Hoặc:

<hibernate.mappingfile>postgis.hbm.xml</hibernate.mappingfile>

Vì vậy, tôi sẽ lấy ví dụ một postgis.hbm.xml tệp:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
 "-//Hibernate/Hibernate Mapping DTD//EN"
 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping>
    <typedef name="org.hibernatespatial.GeometryUserType" class="org.hibernatespatial.GeometryUserType" >
        <param name="dialect">org.hibernatespatial.postgis.PostgisDialect</param>
    </typedef>
</hibernate-mapping>

Và một oracle.hbm.xml :

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
 "-//Hibernate/Hibernate Mapping DTD//EN"
 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping>
    <typedef name="org.hibernatespatial.GeometryUserType" class="org.hibernatespatial.GeometryUserType" >
        <param name="dialect">org.hibernatespatial.oracle.OracleSpatial10gDialect</param>
    </typedef>
</hibernate-mapping>

Tôi tự hỏi liệu có cách nào tốt hơn để làm điều này, nhưng không có cách nào mà tôi có thể tìm thấy trong những ngày này, hoặc tôi đã được trả lời ở đây. Hy vọng rằng điều này sẽ giúp ích cho ai đó.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. wal_keep_searies tại sao lại tối thiểu, không phải tối đa?

  2. Lỗi không tìm thấy tệp PGXS Makefile khi cài đặt PostGis trên Debian

  3. Làm thế nào để sử dụng ANY thay vì IN trong mệnh đề WHERE với Rails?

  4. Có cách nào để thực thi truy vấn bên trong giá trị chuỗi (như eval) trong PostgreSQL không?

  5. Postgresql - Truy vấn chạy nhanh hơn rất nhiều với enable_nestloop =false. Tại sao người lập kế hoạch không làm đúng?