не удается сохранить геометрию объекта в оракуле, используя спящий пространственный - PullRequest
0 голосов
/ 06 мая 2018

Я использую Spring с Hibernate 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)

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

Пожалуйста, добавьте следующие конфиги в 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;
0 голосов
/ 07 мая 2018

Решением было явным образом сказать весне, что я использую пространственный диалект с гибернацией, изменив эту строку:

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

к этому:

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