我正在將應用程序從Hibernate 3.6.10.Final升級到5.0.7.Final 我現在的主要問題是,在Oracle方言生成足夠快的查詢之前,這樣的:用於Oracle Spatial的Hibernate 5 HQL轉換器
SELECT * FROM MY_TABLE
WHERE SDO_RELATE(geom,SDO_GEOMETRY(?,4326),'mask=INSIDE+COVEREDBY') ='TRUE'
現在它將會產生非常慢的東西:
SELECT * FROM MY_TABLE
WHERE MDSYS.OGC_WITHIN(MDSYS.ST_GEOMETRY.FROM_SDO_GEOM(geom),MDSYS.ST_GEOMETRY.FROM_SDO_GEOM(?))=1
這人會不能按時完成,提高事務超時:
JTA transaction unexpectedly rolled back (maybe due to a timeout
我只能認爲,爲了將HQL轉換爲適當的高性能Oracle空間SQL,它使用的任何方言類都有問題。
我的配置如下。
的pom.xml:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.0.7.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.0.7.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-spatial</artifactId>
<version>5.0.7.Final</version>
</dependency>
我的persistence.xml,我在那裏配置Atomikos公司(4.0.0M4)的事務管理器。
<persistence-unit name="pers_unit_name" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jta_data_source_name</jta-data-source>
<mapping-file>oracle.hbm.xml</mapping-file>
<class>...</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.spatial.dialect.oracle.OracleSpatial10gDialect" />
<property name="hibernate.spatial.dialect" value="org.hibernate.spatial.dialect.oracle.OracleSpatial10gDialect" />
<property name="hibernate.spatial.connection_finder" value="org.geolatte.geom.codec.db.oracle.DefaultConnectionFinder" />
<property name="hibernate.connection.autocommit" value="false" />
<property name="hibernate.transaction.manager_lookup_class" value="com.atomikos.icatch.jta.hibernate4.TransactionManagerLookup" />
<property name="transaction.factory_class"
value="org.hibernate.transaction.JTATransactionFactory" />
<property name="hibernate.transaction.jta.platform" value="com.atomikos.icatch.jta.hibernate4.AtomikosPlatform"/>
<property name="hibernate.transaction.coordinator_class" value="jta"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider" />
</properties>
</persistence-unit>
當調試HQLQueryPlan我看到它內部使用的查詢翻譯是:
org.hibernate.hql.internal.ast.QueryTranslatorImpl
不知道這是否是對還是錯,或者如何可以被配置爲生成正確的查詢。
本申請在Tomcat 8.
運行與Hibernate用於映射實體的POJO包含其被定義爲的geom屬性:
@Column(name = "geom", columnDefinition="Geometry", nullable = true)
protected Geometry geom;