PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Tidak menemukan Koneksi Oracle saat koneksi PostGIS ditentukan

Seperti yang dikomentari, tampak bagi saya bahwa Hibernate akan default ke spasialDialect yang akan menjadi yang pertama ditemukan dari yang tersedia, dan dalam hal itu Oracle, terlepas dari apa pun yang ditentukan dalam ketekunan.xml.

Solusi pertama yang saya temukan adalah membubuhi keterangan di entitas bahwa untuk GeometryUserType saya akan menggunakan dialek Postgis seperti pada :

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

Itu akan memaksa Hibernate menggunakan Postgis untuk entitas itu.

Solusi kedua, yang bekerja lebih baik untuk saya (saya harus dapat mengonfigurasi ini dan menggunakan dialek yang berbeda untuk satu entitas tergantung pada unit persistensi dan lingkungan) adalah dengan menggunakan file pemetaan di unit persistensi.

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

Di file pom saya, saya akan membuat file pemetaan itu ke file yang saya butuhkan, menggunakan profil dan variabel Maven.

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

Atau :

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

Jadi saya akan memiliki misalnya postgis.hbm.xml berkas :

<?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>

Dan sebuah 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>

Saya bertanya-tanya apakah ada cara yang lebih baik untuk melakukan ini, tetapi tidak ada yang dapat saya temukan selama hari-hari ini, atau bahwa saya dijawab di sini. Semoga ini bisa membantu seseorang.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PG::Error - bidang numerik meluap di Heroku

  2. Bagaimana cara memeriksa apakah ada sesuatu dalam database postgresql menggunakan Django?

  3. Django:NotImplementedError:annotate() + different(fields) tidak diimplementasikan

  4. Bagaimana cara mendapatkan hitungan hari Minggu bulan ini di psql?

  5. Mendapatkan kunci yang dibuat secara otomatis dari penyisipan baris di musim semi 3 / PostgreSQL 8.4.9