我有一个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());
}
}