Seperti yang dikomentari, tampak bagi saya bahwa Hibernate akan default ke spasialDialect yang akan menjadi yang pertama ditemukan dari yang tersedia, dan dalam hal itu Oracle, terlepas dari apa pun yang ditentukan dalam ketekunan.xml.
Solusi pertama yang saya temukan adalah membubuhi keterangan di entitas bahwa untuk GeometryUserType saya akan menggunakan dialek Postgis seperti pada :
@TypeDefs({@TypeDef(name="org.hibernatespatial.GeometryUserType",
parameters={@org.hibernate.annotations.Parameter(name="dialect",value="org.hibernatespatial.postgis.PostgisDialect")},
typeClass=org.hibernatespatial.GeometryUserType.class)})
Itu akan memaksa Hibernate menggunakan Postgis untuk entitas itu.
Solusi kedua, yang bekerja lebih baik untuk saya (saya harus dapat mengonfigurasi ini dan menggunakan dialek yang berbeda untuk satu entitas tergantung pada unit persistensi dan lingkungan) adalah dengan menggunakan file pemetaan di unit persistensi.
<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>
Di file pom saya, saya akan membuat file pemetaan itu ke file yang saya butuhkan, menggunakan profil dan variabel Maven.
<hibernate.mappingfile>oracle.hbm.xml</hibernate.mappingfile>
Atau :
<hibernate.mappingfile>postgis.hbm.xml</hibernate.mappingfile>
Jadi saya akan memiliki misalnya postgis.hbm.xml
berkas :
<?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>
Dan sebuah 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>
Saya bertanya-tanya apakah ada cara yang lebih baik untuk melakukan ini, tetapi tidak ada yang dapat saya temukan selama hari-hari ini, atau bahwa saya dijawab di sini. Semoga ini bisa membantu seseorang.