liquibase 异常未知数据类型“JSON”

2023-11-26

我的应用程序使用jhipster与mysql和liquibase,mysql版本是5.7.20,支持json列,我使用对象映射器映射json列和java对象,它可以工作,列类型是json,但是当涉及liquibase时(./mvnw package -Pprod dockerfile:build),会出现“未知数据类型'JSON'”之类的异常测试将失败,不会生成 docker 镜像。

我在 20180410012441_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 PM 更新 我将更改集添加为“

<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>

然后我发出“./mvnw package -Pprod dockerfile:build”,这是另一个看似与休眠相关的异常:

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

对于那些即使在定义 TypeDef ...等之后在 H2 和 PostgreSQL 数据库中仍然遇到此问题的人,在执行以下操作后:

@Entity
@TypeDef(name = "jsonb", typeClass = com.vladmihalcea.hibernate.type.json.JsonBinaryType.class)
class SomeEntity {
   // ...
   @Type(type = "jsonb")
   @Column(columnDefinition = "jsonb")
   private List<Skill> abilities = new ArrayList<>();
   // ...
}

您需要通过扩展数据库方言并使用该扩展方言作为方言而不是原始方言来注册类型:

首先定义新的扩展方言:

import org.hibernate.dialect.PostgreSQL10Dialect;
import javax.inject.Inject;

public class AMPostgresDialect
    extends PostgreSQL10Dialect
{
    @Inject
    public AMPostgresDialect()
    {
        super();
        registerColumnType( Types.JAVA_OBJECT, "jsonb" );
    }
}

如果您有用于测试配置文件的 H2 数据库:

import org.hibernate.dialect.H2Dialect;
import java.sql.Types;

public class DhisH2Dialect extends H2Dialect
{
    public DhisH2Dialect()
    {
        super();
        registerColumnType( Types.JAVA_OBJECT, "text" );
        registerColumnType( Types.JAVA_OBJECT, "json" );
    }

然后在应用程序-*.yml在 .properties 文件中,您可以使用这些扩展方言而不是原始方言。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

liquibase 异常未知数据类型“JSON” 的相关文章

  • 使用MySQL计算单个表中借方和贷方的余额

    下面的 MySQL 表包含带有关联金额的借方或贷方 操作 如何选择具有非零 余额 的所有 CLIENT ID 我尝试将表连接到自身以计算所有借方和贷方总额 但有些东西无法正常工作 CLIENT ID ACTION TYPE ACTION A
  • 从 PDO 准备好的语句中获取原始 SQL 查询字符串

    在准备好的语句上调用 PDOStatement execute 时 有没有办法让原始 SQL 字符串执行 出于调试目的 这将非常有用 我假设您的意思是您想要最终的 SQL 查询 并将参数值插入其中 我知道这对于调试很有用 但这不是准备好的语
  • SQL Server 相当于 MySQL 的 USING

    在 MySQL 中 当您连接不同表中具有相同名称的列时 可以在连接中使用关键字 USING 例如 这些查询产生相同的结果 SELECT FROM user INNER JOIN perm USING uid SELECT FROM user
  • 如何使用 PHP 获取列中的所有值?

    我一直在到处寻找这个问题 但仍然找不到解决方案 如何从 mySQL 列中获取所有值并将它们存储在数组中 例如 表名称 客户 列名称 ID 名称 行数 5 我想获取此表中所有 5 个名称的数组 我该如何去做呢 我正在使用 PHP 我试图 SE
  • 如何在数据库中保存未来(!)日期

    这个问题专门涉及未来的日期和时间 对于过去的值 UTC 无疑是首选 我想知道是否有人对拯救生命的 最佳 方法有建议futureMySQL 数据库中的日期和时间 或者就此而言一般来说 特别是在该列可以保存不同时区时间的情况下 考虑到时区规则可
  • 将 mysql LONGTEXT 值转换为 VARCHAR 值?

    我有一个在用户 Facebook 墙上发布的功能 我发送到 facebook 的一件事是我从设置为 LONGTEXT 的 mysql 表中获取的一些文本 如果我将表设置为 LONGTEXT 则文本不会发送到 facebook 但如果我将表设
  • 项目链接在 Wamp 服务器上不起作用

    我正在另一台计算机上安装 Wamp 服务器来运行中型数据库和 UI 我已成功阻止 IIS 并将服务器路由到 Localhost 8080 但是每当我尝试从 localhost 主页访问我的项目时 在 www 文件中 我被重定向到页面未找到错
  • 如何使用 exec.Command 在 golang 中执行 Mysql 脚本

    您好 我正在尝试执行一个脚本以使用 Golang 将数据填充到数据库中 func executeTestScript cmd exec Command usr local mysql bin mysql h127 0 0 1 P3333 u
  • 未知的表引擎“InnoDB”

    最近 我发现如果我有好的硬件 我可以最大限度地提高 mysql 的性能 由于我一直在使用 InnoDB 所以我在 my ini 中添加了额外的配置 以下是新添加的配置 innodb data file path ibdata1 10M au
  • MySQL 选择第一个字符在哪里

    如何选择单元格的第一个字符并使用它来定义返回的内容 看看MySQL 字符串 和 控制流 功能 http dev mysql com doc refman 5 1 en functions html 例如 SELECT IF LEFT myF
  • 如何在分层类别树中找到我的节点及其祖先的所有兄弟节点?

    这是我的桌子 CREATE TABLE IF NOT EXISTS Category Name varchar 25 NOT NULL lft INT UNSIGNED NOT NULL rgt INT UNSIGNED NOT NULL
  • MySQL 使用 DATE_ADD 设置 DATE 列的默认值?

    我正在尝试使用表达式将 DATE 列添加到具有 DEFAULT DATE 值的表中 ALTER TABLE wp ezts project params ADD est completion DATE NOT NULL DEFAULT DA
  • 使用 PHP 显示 Mysql 中的图像

    这就是我的数据库中的表的样子 我正在尝试显示我存储的图像 它是 mimetype longblob 当我运行代码时 它会给我一个带有 的小框 没有错误 只是那个框 有谁知道错误是什么以及如何修复它 Display Index Display
  • MySQL:为什么 IN 子句中的第 5 个 ID 会极大地改变查询计划?

    给出以下两个查询 Query 1 SELECT log id FROM log WHERE user id IN 188858 188886 189854 203623 204072 and type in 14 15 17 ORDER B
  • 如何启用对 MySQL 服务器的外部访问? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 如何启用对 MySQL 服务器的外部访问 我可以在本地连接 但无法从网络上的另一个盒子进行连接 我刚刚尝试过 grant all privileges
  • 判断是否存在多对多记录组合

    这似乎是一个常见的任务 有一个简单的解决方案 但我在 StackOverflow 和 Google 上都空手而归 场景是这样的 我有两个共享多对多关系的表 A 和 B 因此 我有一个带有外键的表 A B 它映射 A 到 B 记录关系 标准的
  • 搜索多个表 (SQL)

    我需要能够有一个 SQL 查询来使用简单的搜索来搜索我的数据库 这是我的表格现在的样子 Table artists id name Table albums id artistID name Table songs id albumID n
  • MySQL 中的类型:BigInt(20) 与 Int(20)

    我想知道两者之间有什么区别BigInt MediumInt and Int是 很明显 它们会允许更大的数量 不过 我可以做一个Int 20 or a BigInt 20 这会让人觉得这并不一定与尺寸有关 一些见解会很棒 只是有点好奇 我一直
  • Laravel 中的 SQL 运算符是什么?

    我正在查看 Laravel 的源代码 发现了很多 Eloquent 的 SQL 运算符 我想知道其中一些是什么以及如何使用它们 不幸的是我没有找到任何文档 这是我找到的运营商vendor laravel framework src Illu
  • 有什么方法可以在MySQL中的表名位置使用变量吗?

    我想在表名称位置使用变量 例如 SELECT FROM targetTableName 然而它会出错 有什么方法可以在MySQL中的表名位置使用变量吗 您显示的查询不起作用有两个原因 插入到查询中的用户定义变量将被视为使用字符串文字 而不是

随机推荐