amp*_*dre 11 varchar hibernate nvarchar sql-server-2005
我的SQL-2005数据库中有一列曾经是varchar(max),但它已被更改为nvarchar(max).
现在我需要更新我的hibernate映射文件以反映更改,这就是以前的情况:
<element type ="text"column ="Value"/>
当我尝试运行该应用程序时,出现以下错误:
org.hibernate.HibernateException:列值为[表]中的列类型错误.找到:ntext,expected:text
我应该在'type'属性中将该列正确映射为nvarchar(max)?
我已经尝试将类型设置为ntext,但是hibernate不知道那是什么.我尝试将类型设置为字符串,但它将字符串视为文本类型.
小智 16
对我有用的是将实际的列定义放在@Column注释中:
@Column(name="requestXml", columnDefinition = "ntext")
private String request;
Run Code Online (Sandbox Code Playgroud)
在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";
}
}
}
Run Code Online (Sandbox Code Playgroud)
此类将Hibernate的类型映射到SQL类型,因此该类将nvarchar(max) SQL数据类型映射 到Hibernate的CLOB数据类型.
当Hibernate使用代码2005(它看起来像是nvarchar(max)数据类型)询问数据类型时,getTypeName方法用于返回"ntext".
最后,您需要将hibernate持久化方言更改为这个新的SQLServerDialect类,它允许hibernate将数据类型转换为SQL数据类型.
| 归档时间: |
|
| 查看次数: |
28306 次 |
| 最近记录: |