在Tremend 技术博客上找到了答案。您必须编写自己的 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 类型,因此该类会将 nvarchar(max) SQL 数据类型映射到 Hibernate 的CLOB数据类型。
当Hibernate 询问代码为 2005 的数据类型(看起来像是 nvarchar(max) 数据类型)时, getTypeName方法用于返回“ntext”。
最后,您需要将您的 hibernate 持久性方言更改为这个新的 SQLServerDialect 类,它允许 hibernate 将数据类型转换为 SQL 数据类型。