现有数据库上的 flyway 迁移导致 "wrong column type encountered in column"

flyway migration on existing database results in "wrong column type encountered in column"

我有 spring 使用我的数据库架构的启动应用程序。可以说我有非空架构 table 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 中定义了我的实体验证模式,但是在启动应用程序时我收到以下错误:

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

据我所知,它抱怨 NVARCHAR2,因为它期望 varchar 我如何强制休眠接受 nvarchar2 作为 varchar

我知道我可以在我的实体属性上使用 columnDefinition,但这不是我理想的解决方案,还有其他方法吗?

我假设您使用的是 Oracle 数据库。

您必须在您的实体中使用 Nationalized 注释您的属性名称

@Nationalized
private String name;

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

public class CustomOracleDialect extends Oracle10gDialect {

    public CustomOracleDialect() {
        super();
        registerColumnType(Types.NVARCHAR, "nvarchar2($l)");
        registerHibernateType(Types.NVARCHAR, StandardBasicTypes.STRING.getName());
    }
}