用于Oracle Spatial的Hibernate 5 HQL转换器
我正在将一个应用程序从Hibernate 3.6.10.Final升级到5.0.7.Final 我现在面临的主要问题是,什么时候Oracle方言会生成这样一个足够快的查询:用于Oracle Spatial的Hibernate 5 HQL转换器,oracle,hibernate,jta,oracle-spatial,Oracle,Hibernate,Jta,Oracle Spatial,我正在将一个应用程序从Hibernate 3.6.10.Final升级到5.0.7.Final 我现在面临的主要问题是,什么时候Oracle方言会生成这样一个足够快的查询: SELECT * FROM MY_TABLE WHERE SDO_RELATE(geom,SDO_GEOMETRY(?,4326),'mask=INSIDE+COVEREDBY') ='TRUE' 现在它将产生非常缓慢的结果: SELECT * FROM MY_TABLE WHERE MDSYS.OGC_WITHIN(
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 spatial 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>
不确定这是正确的还是错误的,也不确定如何将其配置为生成正确的查询
此应用程序正在Tomcat 8上运行
与Hibernate一起用于映射实体的POJO包含geom属性,该属性定义为:
@Column(name = "geom", columnDefinition="Geometry", nullable = true)
protected Geometry geom;
看起来设置
OGC\u STRICT=false
成功了。这告诉Hibernate使用Oracle自己的空间函数,这些函数直接使用,而不是像我们在文档中看到的那样使用与开放地理空间兼容的函数
实际上,我们已经在
org.hibernatespatial.oracle.oracleSpatial10gDialogue.properties
文件中设置了它,但是因为升级后它应该以org.hibernate.spatial.dialogue.oracle.oracleSpatial10gDialogue.properties
命名,所以它对我们不起作用 看起来设置OGC_STRICT=false
起了作用。这告诉Hibernate使用Oracle自己的空间函数,这些函数直接使用,而不是像我们在文档中看到的那样使用与开放地理空间兼容的函数
实际上,我们已经在org.hibernatespatial.oracle.oracleSpatial10gDialogue.properties
文件中设置了它,但是因为升级后它应该以org.hibernate.spatial.dialogue.oracle.oracleSpatial10gDialogue.properties
命名,所以它对我们不起作用
org.hibernate.hql.internal.ast.QueryTranslatorImpl
@Column(name = "geom", columnDefinition="Geometry", nullable = true)
protected Geometry geom;