System.ArgumentException: 24100: недопустимый идентификатор пространственной привязки (SRID). SRID должны быть от 0 до 999999 - PullRequest
0 голосов
/ 02 октября 2019

Я хочу сохранить новые данные геометрии в базе данных, но все время получаю это сообщение об ошибке.

Ошибка .NET Framework при выполнении пользовательской процедуры или агрегата"геометрия". System.ArgumentException: 24100: недопустимый идентификатор пространственной привязки (SRID). Значения SRID должны быть в диапазоне от 0 до 999999.

Регистрация

2019-10-02 06:00:41.009 DEBUG 55688 --- [on(2)-127.0.0.1] o.h.e.j.e.i.JdbcEnvironmentInitiator     : Database ->
       name : Microsoft SQL Server
    version : 14.00.1000
      major : 14
      minor : 0
2019-10-02 06:00:41.010 DEBUG 55688 --- [on(2)-127.0.0.1] o.h.e.j.e.i.JdbcEnvironmentInitiator     : Driver ->
       name : Microsoft JDBC Driver 7.4 for SQL Server
    version : 7.4.1.0
      major : 7
      minor : 4
2019-10-02 06:00:41.010 DEBUG 55688 --- [on(2)-127.0.0.1] o.h.e.j.e.i.JdbcEnvironmentInitiator     : JDBC version : 4.2
2019-10-02 06:00:41.054  INFO 55688 --- [on(2)-127.0.0.1] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.spatial.dialect.sqlserver.SqlServer2008SpatialDialect

...

2019-10-02 05:50:22.232 DEBUG 62340 --- [nio-8080-exec-6] org.hibernate.SQL                        : insert into teste_geo (geom, nome) values (?, ?)
Hibernate: insert into teste_geo (geom, nome) values (?, ?)
2019-10-02 05:50:22.232 TRACE 62340 --- [nio-8080-exec-6] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [VARBINARY] - [POLYGON ((4 0, 2 2, 4 4, 6 2, 4 0))]
2019-10-02 05:50:22.232 TRACE 62340 --- [nio-8080-exec-6] o.h.type.descriptor.sql.BasicBinder      : binding parameter [2] as [VARCHAR] - [5f230d1b-ad0d-44a8-997e-02f4533bcfcd]
2019-10-02 05:50:26.452  INFO 62340 --- [   scheduling-1] c.v.g.o.service.ExemploService           : Executou chamada do servico!
2019-10-02 05:50:26.452  WARN 62340 --- [nio-8080-exec-6] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 6522, SQLState: S0001

Код моего класса

import lombok.Getter;
import lombok.Setter;
import org.locationtech.jts.geom.Geometry;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "TESTE_GEO")
@Getter
@Setter
public class TesteGeom {
    @Id
    @Column(name = "nome")
    private String name;
    @Column(name = "geom")
    private Geometry geometry;
}

...........

        UUID idUnique = UUID.randomUUID();
        TesteGeom t = new TesteGeom();
        t.setName(idUnique.toString());

        GeometryFactory geometryFactory = new GeometryFactory(new PrecisionModel() ,4326); 

        Coordinate[] coords  =
                new Coordinate[] {new Coordinate(4, 0), new Coordinate(2, 2),
                        new Coordinate(4, 4), new Coordinate(6, 2), new Coordinate(4, 0) };

        LinearRing ring = geometryFactory.createLinearRing( coords );
        LinearRing holes[] = null; // use LinearRing[] to represent holes
        int SRID =  geometryFactory.getSRID();
        Polygon polygon = geometryFactory.createPolygon(ring, holes );

       t.setGeometry(polygon);

       t.getGeometry().setSRID(4326);

Выполнение того же SQL на Management Studio это работает!

insert into teste_geo (geom, nome) values ('POLYGON ((4 0, 2 2, 4 4, 6 2, 4 0))', 'OK');

nome    varchar(50) 
geom    geometry    

В запросе я получил ошибку. Вероятно, есть некоторая ошибка диалекта.

org.springframework.orm.jpa.JpaSystemException: could not deserialize; nested exception is org.hibernate.type.SerializationException: could not deserialize
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:351)
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:253)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:527)
    at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61)

1 Ответ

0 голосов
/ 02 октября 2019

Я нашел решение.

В моей модели я использовал:

import org.locationtech.jts.geom.Geometry;

Но Hibernate Spatial принимает только:

import com.vividsolutions.jts.geom.Geometry;

Итак, я меняю свойlib и все работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...