我的应用程序使用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
答案 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>
中的命令。