PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Oracle Connection wird nicht gefunden, wenn eine PostGIS-Verbindung definiert ist

Wie kommentiert, sah es für mich so aus, als würde Hibernate standardmäßig einen SpatialDialect verwenden, der der erste ist, den es aus den verfügbaren findet, und in diesem Fall war es Oracle, ungeachtet dessen, was in der persistence.xml angegeben war.

Die erste Problemumgehung, die ich gefunden habe, bestand darin, in der Entität zu kommentieren, dass ich für den GeometryUserType den Postgis-Dialekt verwenden würde, wie in:

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

Das würde Hibernate zwingen, Postgis für diese Entität zu verwenden.

Die zweite Problemumgehung, die für mich besser funktioniert hat (ich muss in der Lage sein, dies zu konfigurieren und je nach Persistenzeinheit und Umgebung unterschiedliche Dialekte für eine Entität zu verwenden), besteht darin, eine Zuordnungsdatei in der Persistenzeinheit zu verwenden.

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

In meiner Pom-Datei werde ich diese Zuordnungsdatei zu derjenigen machen, die ich benötige, indem ich Maven-Profile und -Variablen verwende.

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

Oder:

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

Also ich hätte zum Beispiel eine postgis.hbm.xml Datei:

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

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

Ich frage mich, ob es einen besseren Weg gibt, dies zu tun, aber ich konnte in diesen Tagen keinen finden oder hier wurde mir geantwortet. Hoffe, dass dies jemandem hilft.