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



我有一个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,我怎么能强迫hibernate接受nvarchar2作为varchar

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

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

你必须在你的实体中用国家化注释你的属性名称

@Nationalized
private String name;

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

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

最新更新