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

时间:2019-01-07 12:07:13

标签: java spring hibernate migration flyway

我有使用我的数据库模式的Spring Boot应用程序。可以说我有一个非空架构,其表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我如何才能强制休眠方式将nvarchar2接受为varchar

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

1 个答案:

答案 0 :(得分:3)

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

您必须使用“国有化”注释实体中的属性名称

@Nationalized
private String name;

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

public class CustomOracleDialect extends Oracle10gDialect {

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