当前位置: 首页 > 知识库问答 >
问题:

现有数据库上的 Flyway 迁移导致“列中遇到错误的列类型”

宗政招
2023-03-14

我有使用我的数据库模式的 Spring 启动应用程序。假设我有一个非空模式,表APPLICATION_USERS定义如下:

create table AREA
(
  name NVARCHAR2(36) not null,
  id   NUMBER not null
)

现在我想将 FlyWay 添加到我的应用程序中。我已经在我的应用程序属性 flyway.baselineOnMigrate=true 中定义了启动初始 Flyway 部署和 spring.jpa.hibernate.ddl-auto=validate 以验证我的 Enities Agains 架构,但是在启动应用程序时我收到以下错误:

 wrong column type encountered in column [name] in table [APPLICATION_USERS]; found [nvarchar2 (Types#OTHER)], but expecting [varchar2(255 char) (Types#VARCHAR)]

据我所知,它抱怨NVARCHAR2,因为它期望varchar如何强制hibernate接受NVARCHAR2varchar

我知道我可以在我的实体属性上使用< code>columnDefinition,但是这不是我梦寐以求的解决方案,还有其他方法吗?

共有1个答案

姬承教
2023-03-14

我假设您正在使用 Oracle 数据库。

你必须在你的实体中用国有化来标注你的属性名

@Nationalized
private String name;

您还可以注册自己的方言:

public class CustomOracleDialect extends Oracle10gDialect {

    public CustomOracleDialect() {
        super();
        registerColumnType(Types.NVARCHAR, "nvarchar2($l)");
        registerHibernateType(Types.NVARCHAR, StandardBasicTypes.STRING.getName());
    }
}
 类似资料:
  • 我正在尝试配置Spring Boot和Flyway,以便使用Spring Boot 2.2.6和Flyway 5.2.3对两个不同的数据源应用单独的迁移。 主要数据源: 第二个数据源: 数据源连接属性: Flyway迁移: 目录结构: 迁移脚本仅正确应用于数据库。 问题是,和中的脚本被应用到数据库,而只应用主目录中的脚本。 如何配置Flyway以仅将目录中的迁移脚本应用于数据库?

  • 我正在使用Spring Boot Starter数据Jpa(2.1.9版本),并尝试映射此表: 实体映射如下: 启动应用程序时,出现以下错误: 我的财产是: 我尝试使用vanilla Jpa和Hibernate(不由Spring管理)进行相同的映射,它工作正常。 有人能给我指出正确的方向吗? 这里有一个maven项目的链接,以防有人想直接尝试。

  • 我正在尝试使用flyway,但是我有一个不知道如何解决的情况: 当我应用STANDARD脚本时,我必须运行V1.0__create_table_TAB1.sql当我将脚本应用到customer1时,TAB1表是一个视图,因此我必须运行V1.0__creaate_view_TAB1_to_schema1.sql。 实际: 应始终应用sql_common文件夹的脚本,但不应应用 V1.0(创建表 TA

  • 问题内容: 我正在使用Laravel 。我在我的库中加载了以下库 我创建了以下迁移: 当列类型。 运行迁移时,出现以下错误: [Doctrine \ DBAL \ DBALException]请求了未知的数据库类型枚举,Doctrine \ DBAL \ Platforms \ MySqlPlatform可能不支持它。 知道为什么我会收到此错误吗?我应该如何解决这个问题?我需要重命名表中的列。是否

  • 我正在flyway的CMD中运行命令,但脚本文件的迁移会出现以下异常 [错误]无法执行目标组织。flywaydb:flyway maven插件:3.2.1:在convertopia auto db:org项目上迁移(默认cli)。flywaydb。果心应用程序编程接口。FlywayException:验证失败。迁移1.0.53的迁移描述不匹配[错误]- 我尝试过,它说构建成功,但问题仍然没有解决。

  • 我在应用程序部署期间进行Hibernate验证时遇到了一些问题。我有两个类,Frame和FrameReleasePlan,它们在OneToOne关系中关联。在数据库端,关系是单向的。frame_release_planss表有一个NUMERIC(19,0)类型的“frame_id”列,它是一个指向frame表“id”列的外键。当我尝试部署时,模式验证失败并出现错误: 无法生成Hibernate S

  • 我在Laravel4.2项目中工作,现在我想在现有的表用户中添加列。现在我想添加另一列,当我运行migration命令时,我总是收到相同的消息“无需迁移”下面是我的迁移模式代码 我在终点站跑步 我还运行以下命令 但是当我运行上面的命令时,我收到以下错误 SQLSTATE[42S01]:基表或视图已经存在: 1050表'用户'已经存在

  • 我们正在使用flyway管理数据库模式版本,我们面临一个问题。因为我们是一个团队,使用git作为源代码管理,所以在某些情况下,不同的人会在自己的本地repo上更新数据库模式。如果发生这种情况,我们将 检测到已解决的迁移未应用于数据库:2016.03.17.16.46“ 时间“2016.03.17.16.46”是由另一个人添加的,我已经晚了一些时间戳。如果发生这种情况,我们必须清理所有数据库表并再次