sql >> Database teknologi >  >> RDS >> PostgreSQL

Finder ikke Oracle Connection, når en PostGIS-forbindelse er defineret

Som nævnt så det ud for mig, at Hibernate som standard vil bruge en spatialDialect, som vil være den første, den finder fra de tilgængelige, og i så fald var det Oracle, på trods af hvad der var angivet i persistence.xml.

Den første løsning, jeg fandt, var at annotere i entiteten, at for GeometryUserType ville jeg bruge 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 ville tvinge Hibernate til at bruge Postgis til denne enhed.

Den anden løsning, som fungerede bedre for mig (jeg skal være i stand til at konfigurere dette og bruge forskellige dialekter for én enhed afhængigt af persistensenheden og miljøet) er at bruge en kortlægningsfil i persistensenheden.

<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 vil jeg lave den tilknytningsfil til den, jeg har brug for, ved hjælp af Maven-profiler og variabler.

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

Eller :

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

Så jeg ville for eksempel have 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>

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

Jeg spekulerer på, om der er en bedre måde at gøre dette på, men ingen, som jeg kunne finde i disse dage, eller som jeg blev besvaret her. Håber, at dette hjælper nogen.




  1. php - Hvordan indsætter jeg HTML-tabeldata i MySQL

  2. MySQL:hvorfor virker denne maks. N medlemmer pr. gruppeforespørgsel?

  3. MySQL:Sådan får du længden af ​​tekst i en kolonne

  4. Enhver præstationspåvirkning i Oracle for at bruge LIKE 'streng' vs ='streng'?