PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Не намиране на Oracle връзка, когато е дефинирана PostGIS връзка

Както беше коментирано, изглеждаше ми, че Hibernate ще използва по подразбиране spatialDialect, който ще бъде първият, който намира от наличните, и в този случай това беше Oracle, въпреки каквото и да е посочено в persistence.xml.

Първото заобиколно решение, което намерих, беше да анотирам в обекта, че за GeometryUserType ще използвам диалекта на Postgis, както в:

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

Това би принудило Hibernate да използва Postgis за този обект.

Второто решение, което работи по-добре за мен (трябва да мога да конфигурирам това и да използвам различни диалекти за един обект в зависимост от единицата за постоянство и средата) е да използвам файл за картографиране в единицата за постоянство.

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

В моя pom файл ще направя този файл за картографиране към този, който ми трябва, като използвам профили и променливи на Maven.

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

Или:

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

Така че бих имал например postgis.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.postgis.PostgisDialect</param>
    </typedef>
</hibernate-mapping>

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

Чудя се дали има по-добър начин да направя това, но нито един, който успях да намеря през тези дни, или който ми беше отговорен тук. Надяваме се, че това ще помогне на някого.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Шаблон за конфигурацията на PostgreSQL

  2. Кой е най-бързият начин за възстановяване на статистиката на PostgreSQL от нула/нулата с ANALYZE?

  3. Регистрирайте конкретна заявка за postgresql с помощта на pg-promise

  4. Postgresql:Заявка 10 пъти по-бавна в различен клиент

  5. Премахване на COMMENT ON от всички обекти в PostgreSQL