MSSql 服务器 jpa 空间异常
MSSql server jpa spatial exception
是否可以在 jpa 中使用 sql 空间数据?我有 MS SQL Server 2014 Express Edition。我正在尝试按如下方式使用空间数据;
maven (pom.xml) 依赖项;
<dependency>
<groupId>com.vividsolutions</groupId>
<artifactId>jts</artifactId>
<version>1.13</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-spatial</artifactId>
<version>5.2.10.Final</version>
</dependency>
- db方言;
spring.jpa.hibernate.dialect=org.hibernate.spatial.dialect.sqlserver.SqlServer2008SpatialDialect
实体定义;
@Column(columnDefinition = "Geometry")
私人点位置;
创建数据;
SampleEntity se = new SampleEntity();
se.setName("Sample1");
se.setAge(30);
GeometryFactory gf = new GeometryFactory(new PrecisionModel(), 4326);
点位置1 = gf.createPoint(新坐标(0, 0, 4384));
location1.setSRID(4326);
se.setLocation(位置 1);
System.out.println("LOCATION 1 SRID: " + se.getLocation().getSRID());
System.out.println("geometry srid: " + gf.getSRID());
sampleEntityRepository.save(se);
我得到以下异常;
"Hibernate: insert into sample_entity (age, author, date_created, date_updated, location, name) values (?, ?, ?, ?, ?, ?)
2017-07-13 16:49:53.655 WARN 6600 --- [main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL 错误:6522,SQL状态:S0001
2017-07-13 16:49:53.656 ERROR 6600 --- [main] o.h.engine.jdbc.spi.SqlExceptionHelper:执行用户定义的例程或聚合时发生 .NET Framework 错误 "geography":
System.ArgumentException: 24204: 空间参考标识符 (SRID) 无效。指定的 SRID 必须与 sys.spatial_reference_systems 目录视图中显示的受支持的 SRID 之一相匹配。
System.ArgumentException:
在 Microsoft.SqlServer.Types.SqlGeography.set_Srid(Int32 值)
在 Microsoft.SqlServer.Types.SqlGeography.Read(BinaryReader r)
在 SqlGeography::.DeserializeValidate(IntPtr, Int32, CClrLobContext*)
."
有什么解决办法吗?或者,我做错了什么吗?
您遇到的问题是由于指定了不正确的方言 属性:
spring.jpa.hibernate.dialect
应该是
spring.jpa.properties.hibernate.dialect
整个字符串是:“spring.jpa.properties.hibernate.dialect=org.hibernate.spatial.dialect.sqlserver.SqlServer2008SpatialDialect”
然后,一切都应该正常工作。在spring:
的日志中可以看到
org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.spatial.dialect.sqlserver.SqlServer2008SpatialDialect
是否可以在 jpa 中使用 sql 空间数据?我有 MS SQL Server 2014 Express Edition。我正在尝试按如下方式使用空间数据;
maven (pom.xml) 依赖项;
<dependency> <groupId>com.vividsolutions</groupId> <artifactId>jts</artifactId> <version>1.13</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-spatial</artifactId> <version>5.2.10.Final</version> </dependency>
- db方言;
spring.jpa.hibernate.dialect=org.hibernate.spatial.dialect.sqlserver.SqlServer2008SpatialDialect
实体定义;
@Column(columnDefinition = "Geometry")
私人点位置;创建数据;
SampleEntity se = new SampleEntity();
se.setName("Sample1");
se.setAge(30);
GeometryFactory gf = new GeometryFactory(new PrecisionModel(), 4326);
点位置1 = gf.createPoint(新坐标(0, 0, 4384));
location1.setSRID(4326);
se.setLocation(位置 1);
System.out.println("LOCATION 1 SRID: " + se.getLocation().getSRID());
System.out.println("geometry srid: " + gf.getSRID());
sampleEntityRepository.save(se);
我得到以下异常;
"Hibernate: insert into sample_entity (age, author, date_created, date_updated, location, name) values (?, ?, ?, ?, ?, ?)
2017-07-13 16:49:53.655 WARN 6600 --- [main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL 错误:6522,SQL状态:S0001
2017-07-13 16:49:53.656 ERROR 6600 --- [main] o.h.engine.jdbc.spi.SqlExceptionHelper:执行用户定义的例程或聚合时发生 .NET Framework 错误 "geography":
System.ArgumentException: 24204: 空间参考标识符 (SRID) 无效。指定的 SRID 必须与 sys.spatial_reference_systems 目录视图中显示的受支持的 SRID 之一相匹配。
System.ArgumentException:
在 Microsoft.SqlServer.Types.SqlGeography.set_Srid(Int32 值)
在 Microsoft.SqlServer.Types.SqlGeography.Read(BinaryReader r)
在 SqlGeography::.DeserializeValidate(IntPtr, Int32, CClrLobContext*) ."
有什么解决办法吗?或者,我做错了什么吗?
您遇到的问题是由于指定了不正确的方言 属性:
spring.jpa.hibernate.dialect
应该是
spring.jpa.properties.hibernate.dialect
整个字符串是:“spring.jpa.properties.hibernate.dialect=org.hibernate.spatial.dialect.sqlserver.SqlServer2008SpatialDialect”
然后,一切都应该正常工作。在spring:
的日志中可以看到org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.spatial.dialect.sqlserver.SqlServer2008SpatialDialect