簡體   English   中英

無法使用休眠空間將幾何對象持久保存到oracle

[英]failing to persist geometry object to oracle using hibernate spatial

我將SpringHibernate Spatial 5.0.12結合使用,並嘗試將com.vividsolutions.jts.geom.Geometry對象持久com.vividsolutions.jts.geom.Geometry到具有SDO_GEOMETRY列的Oracle數據庫中,但是在嘗試將其保存到db時出現此異常:

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)

解決方案是通過更改此行來明確地告訴spring我正在使用具有休眠狀態的空間方言:

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

對此:

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

請在application.properties添加以下配置:

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

spring.datasource.type=oracle.jdbc.pool.OracleDataSource

如果這不起作用,請在模型中使用geolatte庫和以下屬性:

private Point<G2D> point;
private Polygon<G2D> polygon;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM