Java 使用postgresql和hibernate分解数组类型的diffChangeLog时出现映射异常

Java 使用postgresql和hibernate分解数组类型的diffChangeLog时出现映射异常,java,spring,postgresql,hibernate,liquibase,Java,Spring,Postgresql,Hibernate,Liquibase,我正在尝试生成Liquibase diffChangeLog,获取: 运行Liquibase:org.hibernate.MappingException时出现意外错误:没有JDBC类型的方言映射:2003 问题似乎是在实体中使用数组属性。 对于这个数组,我创建了一个hibernate用户类型,因为hibernate不支持现成的数据库数组 有人能帮助运行diffChangeLog吗? 不确定是否必须以任何方式配置liquibase或hibernate (注意:Liquibase命令generat

我正在尝试生成Liquibase diffChangeLog,获取:
运行Liquibase:org.hibernate.MappingException时出现意外错误:没有JDBC类型的方言映射:2003

问题似乎是在实体中使用数组属性。
对于这个数组,我创建了一个hibernate用户类型,因为hibernate不支持现成的数据库数组

有人能帮助运行diffChangeLog吗?
不确定是否必须以任何方式配置liquibase或hibernate

(注意:Liquibase命令generateChangeLog运行成功)
(注2:在应用程序中从数据库中写入和读取数据工作正常)


使用的软件:

  • postgresql 9.6
  • hibernate 5.2.17最终版本
  • 液化酶3.5.5
  • spring 2.0.4
  • 弹簧数据2.0.9
  • java 8/kotlin 1.3.21


实体(kotlin)

为具有自定义数组的实体分解变更集

    <changeSet id="123456789-1" author="me">
        <createTable tableName="my_entity">
            …
            <column name="myValues" type="varchar() []">
                <constraints nullable="true" />
            </column>
            …
        </createTable>

    </changeSet>

…
…
该过程通过命令行中的gradle任务启动

梯度任务

def liquibaseCommand(command) {
    javaexec {

        main = "liquibase.integration.commandline.Main"

        def cfg = <load config from yml>

        args "--changeLogFile=src/main/resources/config/liquibase/changelog/" + buildTimestamp() +"_changelog.xml"
        args "--referenceUrl=hibernate:spring:de.mycompany.mypackage.domain?dialect=org.hibernate.dialect.PostgreSQL95Dialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy"
        args "--username=${cfg.spring.datasource.username}"
        args "--password=${cfg.spring.datasource.password}"
        args "--url=${cfg.spring.datasource.url}"
        args "--driver=org.postgresql.Driver"
        args command
    }
}
def LIQUIBASECOMAND(命令){ javaexec{ main=“liquibase.integration.commandline.main” def cfg= args”--changeLogFile=src/main/resources/config/liquibase/changelog/“+buildTimestamp()+”\u changelog.xml” args”--referenceUrl=hibernate:spring:de.mycompany.mypackage.domain?dialogue=org.hibernate.dialogue=org.hibernate.physical\u naming\u strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit\u naming\u strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy” args”--username=${cfg.spring.datasource.username}” args”--password=${cfg.spring.datasource.password}” args”--url=${cfg.spring.datasource.url}” args“-driver=org.postgresql.driver” args命令 } } 运行会产生以下错误:

错误消息

[system.err] Unexpected error running Liquibase: org.hibernate.MappingException: No Dialect mapping for JDBC type: 2003
[system.err]
system.out]  [main] ERROR liquibase - org.hibernate.MappingException: No Dialect mapping for JDBC type: 2003
[system.err]
[system.out] liquibase.exception.LiquibaseException: liquibase.command.CommandExecutionException: org.hibernate.MappingException: No Dialect mapping for JDBC type: 2003
[system.out]       at liquibase.integration.commandline.CommandLineUtils.doDiffToChangeLog(CommandLineUtils.java:218)
[system.out]       at liquibase.integration.commandline.Main.doMigration(Main.java:996)
[system.out]       at liquibase.integration.commandline.Main.run(Main.java:188)
[system.out]       at liquibase.integration.commandline.Main.main(Main.java:103)
[system.out] Caused by: liquibase.command.CommandExecutionException: org.hibernate.MappingException: No Dialect mapping for JDBC type: 2003
[system.out]       at liquibase.command.AbstractCommand.execute(AbstractCommand.java:13)
[system.out]       at liquibase.integration.commandline.CommandLineUtils.doDiffToChangeLog(CommandLineUtils.java:216)
[system.out]       ... 3 common frames omitted
[system.out] Caused by: org.hibernate.MappingException: No Dialect mapping for JDBC type: 2003
[system.out]       at org.hibernate.dialect.TypeNames.get(TypeNames.java:70)
[system.out]       at org.hibernate.dialect.TypeNames.get(TypeNames.java:101)
[system.out]       at org.hibernate.dialect.Dialect.getTypeName(Dialect.java:346)
[system.out]       at org.hibernate.mapping.Column.getSqlType(Column.java:231)
[system.out]       at liquibase.ext.hibernate.snapshot.ColumnSnapshotGenerator.snapshotColumn(ColumnSnapshotGenerator.java:104)
[system.out]       at liquibase.ext.hibernate.snapshot.ColumnSnapshotGenerator.addTo(ColumnSnapshotGenerator.java:78)
[system.out]       at liquibase.ext.hibernate.snapshot.HibernateSnapshotGenerator.snapshot(HibernateSnapshotGenerator.java:84)
[system.out]       at liquibase.snapshot.SnapshotGeneratorChain.snapshot(SnapshotGeneratorChain.java:50)
[system.out]       at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:246)
[system.out]       at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:363)
[system.out]       at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:385)
[system.out]       at liquibase.snapshot.DatabaseSnapshot.includeNestedObjects(DatabaseSnapshot.java:293)
[system.out]       at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:267)
[system.out]       at liquibase.snapshot.DatabaseSnapshot.init(DatabaseSnapshot.java:80)
[system.out]       at liquibase.snapshot.DatabaseSnapshot.<init>(DatabaseSnapshot.java:53)
[system.out]       at liquibase.snapshot.JdbcDatabaseSnapshot.<init>(JdbcDatabaseSnapshot.java:28)
[system.out]       at liquibase.snapshot.SnapshotGeneratorFactory.createSnapshot(SnapshotGeneratorFactory.java:150)
[system.out]       at liquibase.snapshot.SnapshotGeneratorFactory.createSnapshot(SnapshotGeneratorFactory.java:139)
[system.out]       at liquibase.command.DiffCommand.createReferenceSnapshot(DiffCommand.java:219)
[system.out]       at liquibase.command.DiffCommand.createDiffResult(DiffCommand.java:141)
[system.out]       at liquibase.command.DiffToChangeLogCommand.run(DiffToChangeLogCommand.java:51)
[system.out]       at liquibase.command.AbstractCommand.execute(AbstractCommand.java:8)
[system.out]       ... 4 common frames omitted
[org.gradle.process.internal.DefaultExecHandle] Changing state to: FAILED
[system.err]运行Liquibase:org.hibernate.MappingException时出现意外错误:没有JDBC类型的方言映射:2003
[系统错误]
system.out][main]错误liquibase-org.hibernate.MappingException:没有JDBC类型的方言映射:2003
[系统错误]
[system.out]liquibase.exception.LiquibaseException:liquibase.command.CommandExecutionException:org.hibernate.MappingException:JDBC类型无方言映射:2003
[system.out]位于liquibase.integration.commandline.CommandLineUtils.doDiffToChangeLog(CommandLineUtils.java:218)
[system.out]位于liquibase.integration.commandline.Main.doMigration(Main.java:996)
[system.out]位于liquibase.integration.commandline.Main.run(Main.java:188)
[system.out]位于liquibase.integration.commandline.Main.Main(Main.java:103)
[system.out]原因:liquibase.command.CommandExecutionException:org.hibernate.MappingException:没有JDBC类型的方言映射:2003
[system.out]位于liquibase.command.AbstractCommand.execute(AbstractCommand.java:13)
[system.out]位于liquibase.integration.commandline.CommandLineUtils.doDiffToChangeLog(CommandLineUtils.java:216)
[系统输出]。。。省略3个公共框架
[system.out]原因:org.hibernate.MappingException:没有JDBC类型的方言映射:2003
[system.out]位于org.hibernate.dialogue.TypeNames.get(TypeNames.java:70)
[system.out]位于org.hibernate.dialogue.TypeNames.get(TypeNames.java:101)
[system.out]位于org.hibernate.dialogue.dialogue.getTypeName(dialogue.java:346)
[system.out]位于org.hibernate.mapping.Column.getSqlType(Column.java:231)
[system.out]位于liquibase.ext.hibernate.snapshot.ColumnSapshotGenerator.snapshotColumn(ColumnSapshotGenerator.java:104)
[system.out]位于liquibase.ext.hibernate.snapshot.ColumnSapshotGenerator.addTo(ColumnSapshotGenerator.java:78)
[system.out]位于liquibase.ext.hibernate.snapshot.HibernateSnapshotGenerator.snapshot(HibernateSnapshotGenerator.java:84)
[system.out]位于liquibase.snapshot.SnapshotGeneratorChain.snapshot(SnapshotGeneratorChain.java:50)
[system.out]位于liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:246)
[system.out]位于liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:363)
[system.out]位于liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:385)
[system.out]位于liquibase.snapshot.DatabaseSnapshot.includeNestedObjects(DatabaseSnapshot.java:293)
[system.out]位于liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:267)
[system.out]位于liquibase.snapshot.DatabaseSnapshot.init(DatabaseSnapshot.java:80)
[system.out]位于liquibase.snapshot.DatabaseSnapshot.(DatabaseSnapshot.java:53)
[system.out]位于liquibase.snapshot.JdbcDatabaseSnapshot.(JdbcDatabaseSnapshot.java:28)
[system.out]位于liquibase.snapshot.SnapshotGeneratorFactory.createSnapshot(SnapshotGeneratorFactory.java:150)
[system.out]位于liquibase.snapshot.SnapshotGeneratorFactory.createSnapshot(SnapshotGeneratorFactory.java:139)
[system.out]位于liquibase.command.DiffCommand.CreateReferencesSnapshot(DiffCommand.java:219)
[system.out]位于liquibase.command.DiffCommand.createDiffResult(DiffCommand.java:141)
[system.out]位于liquibase.command.DiffToChangeLogCommand.run(DiffToChangeLogCommand.java:51)
[system.out]位于liquibase.command.AbstractCommand.execute(AbstractCommand.java:8)
[系统输出]。。。省略4个公共框架
[org.gradle.process.internal.DefaultExecHandle]将状态更改为:失败
def liquibaseCommand(command) {
    javaexec {

        main = "liquibase.integration.commandline.Main"

        def cfg = <load config from yml>

        args "--changeLogFile=src/main/resources/config/liquibase/changelog/" + buildTimestamp() +"_changelog.xml"
        args "--referenceUrl=hibernate:spring:de.mycompany.mypackage.domain?dialect=org.hibernate.dialect.PostgreSQL95Dialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy"
        args "--username=${cfg.spring.datasource.username}"
        args "--password=${cfg.spring.datasource.password}"
        args "--url=${cfg.spring.datasource.url}"
        args "--driver=org.postgresql.Driver"
        args command
    }
}
[system.err] Unexpected error running Liquibase: org.hibernate.MappingException: No Dialect mapping for JDBC type: 2003
[system.err]
system.out]  [main] ERROR liquibase - org.hibernate.MappingException: No Dialect mapping for JDBC type: 2003
[system.err]
[system.out] liquibase.exception.LiquibaseException: liquibase.command.CommandExecutionException: org.hibernate.MappingException: No Dialect mapping for JDBC type: 2003
[system.out]       at liquibase.integration.commandline.CommandLineUtils.doDiffToChangeLog(CommandLineUtils.java:218)
[system.out]       at liquibase.integration.commandline.Main.doMigration(Main.java:996)
[system.out]       at liquibase.integration.commandline.Main.run(Main.java:188)
[system.out]       at liquibase.integration.commandline.Main.main(Main.java:103)
[system.out] Caused by: liquibase.command.CommandExecutionException: org.hibernate.MappingException: No Dialect mapping for JDBC type: 2003
[system.out]       at liquibase.command.AbstractCommand.execute(AbstractCommand.java:13)
[system.out]       at liquibase.integration.commandline.CommandLineUtils.doDiffToChangeLog(CommandLineUtils.java:216)
[system.out]       ... 3 common frames omitted
[system.out] Caused by: org.hibernate.MappingException: No Dialect mapping for JDBC type: 2003
[system.out]       at org.hibernate.dialect.TypeNames.get(TypeNames.java:70)
[system.out]       at org.hibernate.dialect.TypeNames.get(TypeNames.java:101)
[system.out]       at org.hibernate.dialect.Dialect.getTypeName(Dialect.java:346)
[system.out]       at org.hibernate.mapping.Column.getSqlType(Column.java:231)
[system.out]       at liquibase.ext.hibernate.snapshot.ColumnSnapshotGenerator.snapshotColumn(ColumnSnapshotGenerator.java:104)
[system.out]       at liquibase.ext.hibernate.snapshot.ColumnSnapshotGenerator.addTo(ColumnSnapshotGenerator.java:78)
[system.out]       at liquibase.ext.hibernate.snapshot.HibernateSnapshotGenerator.snapshot(HibernateSnapshotGenerator.java:84)
[system.out]       at liquibase.snapshot.SnapshotGeneratorChain.snapshot(SnapshotGeneratorChain.java:50)
[system.out]       at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:246)
[system.out]       at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:363)
[system.out]       at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:385)
[system.out]       at liquibase.snapshot.DatabaseSnapshot.includeNestedObjects(DatabaseSnapshot.java:293)
[system.out]       at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:267)
[system.out]       at liquibase.snapshot.DatabaseSnapshot.init(DatabaseSnapshot.java:80)
[system.out]       at liquibase.snapshot.DatabaseSnapshot.<init>(DatabaseSnapshot.java:53)
[system.out]       at liquibase.snapshot.JdbcDatabaseSnapshot.<init>(JdbcDatabaseSnapshot.java:28)
[system.out]       at liquibase.snapshot.SnapshotGeneratorFactory.createSnapshot(SnapshotGeneratorFactory.java:150)
[system.out]       at liquibase.snapshot.SnapshotGeneratorFactory.createSnapshot(SnapshotGeneratorFactory.java:139)
[system.out]       at liquibase.command.DiffCommand.createReferenceSnapshot(DiffCommand.java:219)
[system.out]       at liquibase.command.DiffCommand.createDiffResult(DiffCommand.java:141)
[system.out]       at liquibase.command.DiffToChangeLogCommand.run(DiffToChangeLogCommand.java:51)
[system.out]       at liquibase.command.AbstractCommand.execute(AbstractCommand.java:8)
[system.out]       ... 4 common frames omitted
[org.gradle.process.internal.DefaultExecHandle] Changing state to: FAILED