背景
我有一个应用程序,在 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 时,我收到与插入几何图形相关的错误。
答案是确保您首先在 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 似乎以基于文本的格式而不是二进制格式存储点 - 也许有人更了解这是为什么。