Hibernate如何映射SQL数据类型nvarchar(max)?
我的SQL-2005数据库中有一列曾经是 ,但已更改为 。
现在,我需要更新我的hibernate映射文件以反映更改,这就是它过去的样子:
当我尝试运行该应用程序时,出现以下错误:
org.hibernate.HibernateException:[表]中列值的列类型错误。找到:ntext,预期:文本
我应该在’type’属性中添加什么以将列正确映射为 ?
我尝试将类型设置为 ntext ,但是hibernate不知道那是什么。我尝试将类型设置为 string ,但将 string 视为 文本 类型。
回答:
在Tremend Tech
Blog上找到了答案。您必须编写自己的SQLServerDialect类,它看起来像这样:
public class SQLServerNativeDialect extends SQLServerDialect { public SQLServerNativeDialect() {
super();
registerColumnType(Types.VARCHAR, "nvarchar($l)");
registerColumnType(Types.CLOB, "nvarchar(max)");
}
public String getTypeName(int code, int length, int precision, int scale) throws HibernateException {
if(code != 2005) {
return super.getTypeName(code, length, precision, scale);
} else {
return "ntext";
}
}
}
此类将Hibernate的类型映射为SQL类型,因此该类会将 SQL数据类型映射 为Hibernate的 数据类型。
该
方法被用来当Hibernate询问与2005码(看起来像它的数据类型为nvarchar(max)数据类型)的数据类型返回“NTEXT”。
最后,您需要将hibernate持久性方言更改为这个新的SQLServerDialect类,该类允许hibernate将数据类型转换为SQL数据类型。
以上是 Hibernate如何映射SQL数据类型nvarchar(max)? 的全部内容, 来源链接: utcz.com/qa/414568.html