【发布时间】:2019-06-19 06:09:21
【问题描述】:
我必须使用 JPA + Hibernate 做一个项目,其中我使用 3 种方言:MySQL5InnoDBDialect、MSSQL2012Dialect 和 Oracle12cDialect。
现在我有一个规范告诉我,对于某些列来自:
Oracle 数据库,我必须使用 NVARCHAR2(LENGTH) 数据类型
MySql 数据库,我必须使用 VARCHAR(LENGTH) 数据类型
MSSQL 数据库,我必须使用 NVARCHAR(LENGTH) 数据类型
...这是我的问题..
-
如果我使用:
@Column(name="columnName" 长度 = 255) 私有字符串列名; hibernate 生成 varchar(255),这仅适用于 MySQL
-
如果我使用:
@Column(name="columnName", columnDefinition="nvarchar2(255)") 私有字符串列名; 这在 MySQL 中是不可能的,因为 columnDefinition 我得到错误,但在 oracle 中是可以的
-
我尝试自定义 MySQL 方言创建
公共类 CustomMySQL5InnoDBDialect 扩展 MySQL5InnoDBDialect{
public CustomMySQL5InnoDBDialect() { super(); registerColumnType(Types.NVARCHAR, "nvarchar2($l)");//$l not $1 registerHibernateType(Types.NVARCHAR, StandardBasicTypes.STRING.getName()); }}
并在休眠配置中为 MySQL 方言提供此类。 如果我使用 columnDefinition 属性,我在 MySQL 中会遇到同样的问题。
你能帮忙解决这个问题吗?
【问题讨论】:
标签: mysql sql-server oracle hibernate jpa