首页 > 解决方案 > 无法使用休眠空间将几何对象持久保存到 Oracle

问题描述

我将SpringHibernate Spatial 5.0.12 一起使用,并尝试将com.vividsolutions.jts.geom.Geometry对象持久保存到带有列的Oracle数据库,SDO_GEOMETRY但在尝试将其保存到数据库时出现此异常:

ORA-00932: Inconsistent datatypes: expected MDSYS.SDO_GEOMETRY got BINARY

我在其他任何地方都没有发现这个问题,也不知道如何解决它,因为我是休眠新手。

这是我要保存的实体:

@Entity
@Table(name = "DETECTED_OBJECTS")
public class DetectedObject {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "DETECTED_SEQ")
    @SequenceGenerator(sequenceName = "detected_seq", allocationSize = 1, name = "DETECTED_SEQ"_
    private Long id;
    private Geometry polygon;

    public DetectedObject(){}

    public DetectedObject(Coordinate[] coordinates){
    this.polygon = new GeometryFactory().createPolygon(coordinates);
    }
}

这是我的休眠配置:

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.Oracle10gDialect
spring.jpa.properties.provider_class = org.hibernate.cache.NoCacheProvider
spring.jpa.hibernate.ddl-auto = update
spring.jpa.properties.hibernate.format-sql = true

以及引发异常的实际行:

detectedObjectRepository.save(detectedObject)

标签: javahibernatespring-data-jpaoracle10ghibernate-spatial

解决方案


解决方案是通过更改此行来明确告诉春天我正在使用带有休眠的空间方言:

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.Oracle10gDialect

对此:

spring.jpa.properties.hibernate.dialect = org.hibernate.spatial.dialect.oracle.OracleSpatial10gDialect

推荐阅读