sql >> Databáze >  >> RDS >> PostgreSQL

Nenalezen Oracle Connection, když je definováno připojení PostGIS

Jak jsem uvedl, zdálo se mi, že Hibernate použije jako výchozí prostorový dialekt, který bude prvním, který najde z dostupných, a v tom případě to byl Oracle, navzdory všemu, co bylo uvedeno v persistence.xml.

Prvním řešením, které jsem našel, bylo v entitě anotovat, že pro GeometryUserType bych použil dialekt Postgis jako v :

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

To by donutilo Hibernate použít Postgis pro tuto entitu.

Druhým řešením, které se mi osvědčilo lépe (musím to umět nakonfigurovat a používat různé dialekty pro jednu entitu v závislosti na jednotce persistence a prostředí), je použití mapovacího souboru v jednotce persistence.

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

V mém souboru pom vytvořím tento mapovací soubor na ten, který potřebuji, pomocí profilů a proměnných Maven.

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

Nebo :

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

Takže bych měl například postgis.hbm.xml soubor :

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

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

Zajímalo by mě, jestli existuje lepší způsob, jak to udělat, ale žádný, který jsem v těchto dnech nenašel, nebo který jsem zde dostal odpověď. Doufám, že to někomu pomůže.




  1. PSQLException:Velké objekty nelze použít v režimu automatického potvrzení

  2. Prostorový index Mysql nepoužitý

  3. Jak mohu zavést více podmínek v operátoru LIKE?

  4. Jak zdravotnický průmysl používá databáze