使用 Spring Boot 3.2 实现 H2 内存和几何数据

问题描述 投票:0回答:1

背景

我有一个应用程序,在 Spring Boot 3.2 的数据库中使用

POINT
数据来获取纬度和经度。生产数据库是 MySQL,我可以使用以下语句插入点数据:

ST_PointFromText('POINT(-36.5 174.5)', 4326)

但是对于开发,我使用 H2 内存数据库。如何将经纬度数据插入H2数据库。我正在使用 Hibernate Geolatte 依赖项。

构建.gradle

implementation group: 'org.geolatte', name: 'geolatte-geom', version: '1.9.0'
implementation group: 'org.geolatte', name: 'geolatte-geojson', version: '1.9.0'
implementation group: 'org.hibernate.orm', name: 'hibernate-spatial', version: '6.2.6.Final'
implementation group: 'org.orbisgis', name: 'h2gis', version: '2.2.0'
runtimeOnly 'com.h2database:h2'

实体

import org.geolatte.geom.G2D;
import org.geolatte.geom.Point;

@AllArgsConstructor
@NoArgsConstructor
@ToString
@Entity
@Data
@Table(name = "test_check")
public class TestCheck {

    @Id
    @GeneratedValue(strategy = IDENTITY)
    private Long id;

    private Point<G2D> location;

当我尝试运行用于 MySQL 的相同 data.sql 时,我收到与插入几何图形相关的错误。

spring-boot gis h2
1个回答
0
投票

答案是确保您首先在 data.sql 中引用对 load

H2GIS_SPATIAL
的调用。

CREATE ALIAS IF NOT EXISTS H2GIS_SPATIAL FOR "org.h2gis.functions.factory.H2GISFunctions.load";
CALL H2GIS_SPATIAL();

然后从

ST_PointFromText('POINT(-36.5 174.5)', 4326)
更改为使用同一语句的 H2 语法
ST_SetSRID(ST_MakePoint(-32.5, 174.5), 4326))

H2 似乎以基于文本的格式而不是二进制格式存储点 - 也许有人更了解这是为什么。

© www.soinside.com 2019 - 2024. All rights reserved.