Както беше коментирано, изглеждаше ми, че 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>
Чудя се дали има по-добър начин да направя това, но нито един, който успях да намеря през тези дни, или който ми беше отговорен тук. Надяваме се, че това ще помогне на някого.