我正在用Spring boot撰寫一個RESTfull API,使用Maven Liquibase來管理資料庫的遷移,同時使用MySQL 8。
我在網上搜索了一下(1,2, 3),但是Liquibase仍然在遷移中生成 "TINYBLOB "型別而不是 "POINT "或 "GEOMETRY"。令人驚訝的是,當我編輯遷移檔案(即changeSet并使用 "POINT "時,mvn liquibase:update仍然在資料庫中創建一個TINYBLOB列。
我有一個典型的JPA物體:
我有一個典型的JPA物體。
import org.locationtech.jts.geom.Point;
@Entity
class MyModel {
private Point location;
//更多領域
我正在使用Liquibase 4.3版和Hibernate 5.4版。對于hibernate方言,我使用的是org.hibernate.spatial.dialect.mysql.MySQL8SpatialDialect。
在我看來,空間型別不應該由Liquibase承擔......但這將是令人驚訝的。如果有任何幫助,我們將不勝感激(所有其他資料型別的行為都符合預期)。
uj5u.com熱心網友回復:
前段時間遇到了同樣的問題,最后手動覆寫了自動生成的遷移檔案的一部分。對于MySQL 8.
來說,作業得很好。 <! --定義型別-->
< 屬性名稱="pointType" 價值="geometry" DBMS="h2"/> <! --僅適用于記憶體集成測驗-->
< 屬性名稱="pointType" 值="POINT" DBMS="mysql, oracle, mssql, mariadb, postgresql"/>
<!--使用列上的型別-->
<column name=" location" type="${pointType}">
<constraints nullable="true" />
</column>/span>
我的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.*;
輸入 java.io.Serializable;
@Entity
@Table(name = "some_entity")
public class SomeEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(策略 = 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" )
私人點的位置。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/327141.html
標籤:
上一篇:對聯合表的代碼簡化的建議
