liquibase异常未知数据类型" JSON"

时间:2018-04-14 17:28:03

标签: jhipster liquibase

我的应用程序使用jhipster和mysql和liquibase,而mysql版本是5.7.20,它支持json列,我使用ObjectMapper映射json列和java对象,它的工作原理,列类型是json,但当涉及liquibase(./mvnw包-Pprod dockerfile:build)时,会出现类似"未知数据类型' JSON'"并且测试将失败,不会生成docker图像。

我在2018410012441_added_entity_Ability.xml中为该json列更改了一点:

     <column name="abilities" type="json">
        <constraints nullable="true"/>
    </column>

在我的域类中,json相关字段如下:

@Type(type = "json")
@Column(columnDefinition = "json")
private List<Skill> abilities = new ArrayList<>();

我怀疑问题与xml列/类型定义有关,liquibase不支持json关键字,我不知道应该为正确的类型提供什么。

有人可以帮忙吗?非常感谢。

=============================================== ========== 更新时间北京时间9:01 我添加了一个changeSet作为&#34;

<changeSet id="20180415081741-1" author="jhipster">
  <sql dbms="mysql" endDelimiter="\nGO" splitStatements="true"
     stripComments="true">ALTER TABLE `ability` ADD `abilities` json DEFAULT NULL</sql>
</changeSet>

然后我发出&#34; ./ mvnw包-Pprod dockerfile:build&#34;,另一个看似与hibernate相关的异常:

2018-04-15 20:56:52.186 ERROR 23936 --- [           main] o.h.metamodel.internal.MetadataContext   : HHH015007: Illegal argument on static metamodel field injection : com.james.app.domain.Ability_#abilities; expected type :  org.hibernate.metamodel.internal.SingularAttributeImpl; encountered type : javax.persistence.metamodel.ListAttribute

2 个答案:

答案 0 :(得分:0)

将liquibase列类型更改为jsonb并尝试。

<column name="abilities" type="jsonb">
        <constraints nullable="true"/>
</column>

将类型和列定义添加为jsonb

@Type(type = "jsonb")
@Column(columnDefinition = "jsonb")
private List<Skill> abilities = new ArrayList<>();

答案 1 :(得分:0)

考虑到您正在使用 Oracle,请检查此 https://docs.oracle.com/en/database/oracle/oracle-database/12.2/adjsn/creating-a-table-with-a-json-column.html#GUID-E6CC0DCF-3D72-41EF-ACA4-B3BF54EE3CA0 以使用 JSON 列创建表。在 liquibase 中使用 <sql> </sql> 中的命令。