Zoals opgemerkt, leek het me dat Hibernate standaard een ruimtelijk Dialect zal gebruiken dat het eerste zal zijn dat het vindt uit de beschikbare, en in dat geval was het Oracle, ondanks wat er ook was gespecificeerd in de persistence.xml.
De eerste oplossing die ik vond was om in de entiteit te annoteren dat ik voor het GeometryUserType het dialect van Postgis zou gebruiken zoals in:
@TypeDefs({@TypeDef(name="org.hibernatespatial.GeometryUserType",
parameters={@org.hibernate.annotations.Parameter(name="dialect",value="org.hibernatespatial.postgis.PostgisDialect")},
typeClass=org.hibernatespatial.GeometryUserType.class)})
Dat zou Hibernate dwingen Postgis voor die entiteit te gebruiken.
De tweede oplossing, die voor mij beter werkte (ik moet dit kunnen configureren en verschillende dialecten voor één entiteit moeten gebruiken, afhankelijk van de persistentie-eenheid en de omgeving) is om een toewijzingsbestand in de persistentie-eenheid te gebruiken.
<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>
In mijn pom-bestand zal ik dat toewijzingsbestand maken naar het bestand dat ik nodig heb, met behulp van Maven-profielen en variabelen.
<hibernate.mappingfile>oracle.hbm.xml</hibernate.mappingfile>
Of :
<hibernate.mappingfile>postgis.hbm.xml</hibernate.mappingfile>
Dus ik zou bijvoorbeeld een postgis.hbm.xml
. hebben bestand :
<?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>
En een 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>
Ik vraag me af of er een betere manier is om dit te doen, maar geen die ik tijdens deze dagen kon vinden, of dat ik hier werd beantwoord. Ik hoop dat dit iemand helpt.