sql >> Databasteknik >  >> RDS >> PostgreSQL

Hittar inte Oracle Connection när en PostGIS-anslutning är definierad

Som kommenterat såg det ut för mig att Hibernate som standard kommer att använda en spatialDialect som kommer att vara den första den hittar från det tillgängliga, och i så fall var det Oracle, trots vad som än specificerades i persistence.xml.

Den första lösningen som jag hittade var att anteckna i entiteten att för GeometryUserType skulle jag använda Postgis dialekt som i:

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

Det skulle tvinga Hibernate att använda Postgis för den enheten.

Den andra lösningen, som fungerade bättre för mig (jag måste kunna konfigurera detta och använda olika dialekter för en enhet beroende på persistensenheten och miljön) är att använda en mappningsfil i persistensenheten.

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

I min pom-fil kommer jag att göra den mappningsfilen till den jag behöver, med hjälp av Maven-profiler och variabler.

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

Eller:

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

Så jag skulle till exempel ha en postgis.hbm.xml fil :

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

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

Jag undrar om det finns ett bättre sätt att göra detta på, men inget som jag kunde hitta under dessa dagar, eller som jag fick svar här. Hoppas att detta hjälper någon.




  1. mysql multipla frågor i ett uttalande

  2. MySQL-rader raderas när programmet avslutas

  3. hur man återställer databaser i phpmyadmin efter avinstallation av xampp

  4. 11 SQL Server-index bästa praxis för förbättrad prestandajustering