Liquibase 为几何类型生成迁移(Spring 使用 JPA/Hibernate 启动)

Liquibase generate migration for geometry type (Spring boot with JPA/Hibernate)

我正在编写一个 RESTfull API Spring 使用 Maven Liquibase 启动来管理数据库的迁移 MySQL 8。

我已在线搜索 (1,2, 3),但 Liquibase 仍在迁移中生成“TINYBLOB”类型,而不是“POINT”或“GEOMETRY”。令人惊讶的是,当我编辑迁移文件(即 changeSet 并使用“POINT”时,mvn liquibase:update 仍然在数据库上创建一个 TINYBLOB 列。

我有一个典型的 JPA 实体:

import org.locationtech.jts.geom.Point;


@Entity
class MyModel {

  private Point location;

  // more fields

我使用的是 Liquibase 4.3 版和 Hibernate 5.4 版。对于 hibernate 方言,我使用的是 org.hibernate.spatial.dialect.mysql.MySQL8SpatialDialect.

在我看来,空间类型不是 Liquibase 所假定的……但这会令人惊讶。任何帮助将不胜感激(所有其他数据类型都按预期运行)。

运行 前段时间遇到了同样的问题,最终手动覆盖了自动生成的迁移文件的部分内容。 MySQL 8.

工作正常
 <!--    Define the type-->
<property name="pointType" value="geometry" dbms="h2"/> <!--    Only relevant for in-memory integration tests-->
<property name="pointType" value="POINT" dbms="mysql, oracle, mssql, mariadb, postgresql"/>

<!--    Use the type on the column-->
<column name="location" type="${pointType}">
    <constraints nullable="true" />
</column>

我的 Hibernate 模型的简化版本。

package com.Whosebug.sample.domain;


import com.vividsolutions.jts.geom.Point;
import org.hibernate.annotations.Type;
import org.springframework.data.elasticsearch.annotations.FieldType;

import javax.persistence.*;
import java.io.Serializable;


@Entity
@Table(name = "some_entity")
public class SomeEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @org.springframework.data.elasticsearch.annotations.Field(type = FieldType.Keyword)
    private Long id;

    @Type(type = "com.vividsolutions.jts.geom.Point")
    @Column(name = "location", nullable = false, columnDefinition = "geometry")
    private Point location;

}