当前位置: 首页 > 知识库问答 >
问题:

Liquibase生成几何类型的迁移(Spring boot with jpa/hibernate)

霍修筠
2023-03-14

我正在编写一个带有Spring boot的RESTfull API,使用Maven Liquibase来管理数据库的MySQL8迁移。

我已经在网上搜索了(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.dialt.mysql.mysql8spatialdiange

在我看来,空间类型不是液体基假设的...但那将是令人惊讶的。任何帮助都将非常感谢(所有其他数据类型的行为都如预期的那样)。

共有1个答案

罗星洲
2023-03-14

前一段时间遇到了同样的问题,最终手动覆盖了自动生成的迁移文件的部分内容。适用于MySQL8。

 <!--    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.stackoverflow.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;

}
 类似资料:
  • 我以前见过类似的话题,但没有解决方案。 完整的堆栈跟踪是这样的... 严重的7/27/16下午6:14:liquiBase:CVC-complex-type.2.3:元素“create table”不能有字符[子],因为该类型的内容类型是只包含元素的。LiquiBase.exception.ChangeLogParseException:解析MSSQL-ConfluenceTest-ChangeL

  • 我正在使用Docker图像来宿主Flowable。DB驱动程序是Postgres。当我们启动IDM和REST时,它运行liquibase脚本来创建db表。由于默认配置是drop-create(databaseSchemaUpdate)在代码库中的databaseSchemaUpdate中的drop-create(drop-create),因此很难扩展甚至重新启动docker idm和rest(因为

  • 在docker容器中部署应用程序时,我无法使用Spring Boot实现liquibase迁移。我有一个胖罐子,它是在docker图像创建时提取的。 我有一个单独的模块,保存迁移文件。我能装上主机。xml: 然后它继续并加载其余的资源。问题在于然后从加载的资源中提取仍然正常的实际路径: 但是接下来做一些路径操作,结果是: 这反过来又不是有效的类路径: 我需要(类路径)或以能够读取文件。但它总是以上

  • 改变变量的类型。 操作步骤: 菜单栏: Refactor --> Type Migration 快捷键 Mac: fn+ Shift + Command + F6

  • 我正在编写一个liquibase脚本,以创建一个带有列的表(来自PostGreSQL DB的PostGis扩展) 31-03-2021 21:07:31.587[main]警告C.M.MS.Block...applyLiquiBase-应用liquibase尝试5:更改集类路径:db/changelog/db.changelog-master.yaml::5-change-set-places::

  • 我有一套序列模型。我想使用迁移,而不是数据库同步。 根据这篇文章,Sequelize CLI似乎能够做到这一点:“当您使用CLI生成模型时,您还可以免费获得迁移脚本。” 如何使用Sequelize CLI从现有的Sequelize模型中自动生成迁移?