PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Nie można znaleźć połączenia Oracle, gdy zdefiniowane jest połączenie PostGIS

Jak skomentowałem, wydawało mi się, że Hibernate domyślnie wybierze przestrzenny dialekt, który będzie pierwszym, jaki znajdzie z dostępnych, iw tym przypadku była to Oracle, pomimo tego, co zostało określone w persistence.xml.

Pierwszym obejściem, które znalazłem, było dodanie adnotacji w encji, że dla GeometryUserType użyłbym dialektu Postgis, jak w:

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

To zmusiłoby Hibernate do użycia Postgis dla tego podmiotu.

Drugie obejście, które zadziałało lepiej dla mnie (muszę to skonfigurować i używać różnych dialektów dla jednej jednostki w zależności od jednostki utrwalania i środowiska) jest użycie pliku mapowania w jednostce utrwalania.

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

W moim pliku pom zrobię ten plik mapowania do tego, którego potrzebuję, używając profili i zmiennych Mavena.

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

Lub :

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

Więc miałbym na przykład postgis.hbm.xml plik :

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

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

Zastanawiam się, czy jest lepszy sposób na zrobienie tego, ale żaden nie mógłbym znaleźć w tych dniach lub że otrzymałem tutaj odpowiedź. Mam nadzieję, że to komuś pomoże.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Do czego służą Reguły PostgreSQL?

  2. Jak Cosd() działa w PostgreSQL

  3. Aktualizacja między 2 bazami danych przy użyciu dblink nie działa

  4. alternatywa sp_send_dbmail w postgresie? Łatwy sposób na wysyłanie raportów e-mail Postgres?

  5. ROK daje błąd