我的SQL-2005数据库中有一列曾经是 varchar(max) ,但已更改为 nvarchar(max) 。
现在,我需要更新我的hibernate映射文件以反映更改,这就是它过去的样子:
当我尝试运行该应用程序时,出现以下错误:
org.hibernate.HibernateException:[表]中列值的列类型错误。找到:ntext,预期:文本
我应该在’type’属性中添加什么以将列正确映射为 nvarchar(max) ?
我尝试将类型设置为 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类型,因此该类会将 nvarchar(max) SQL数据类型映射 为Hibernate的
CLOB
数据类型。
该 getTypeName
方法被用来当Hibernate询问与2005码(看起来像它的数据类型为nvarchar(max)数据类型)的数据类型返回“NTEXT”。
最后,您需要将hibernate持久性方言更改为这个新的SQLServerDialect类,该类允许hibernate将数据类型转换为SQL数据类型。
问题内容: 我继承了一个SQL Server数据库,该数据库正试图通过JPA进行映射。许多表都有一列。我试图像这样映射它们: Hibernate抱怨: 问题答案: POJO中主键属性的数据类型确定其映射DB列的数据类型,这由Dialect类指定。按照SQLServerDialect由Hibernate提供,它不具有任何数据类型映射到,并且在默认情况下映射到 我认为 基于主键的策略仅意味着hiber
字段的datatype可以从Nvarchar更改为int吗?? 这个有效吗??如果不能,可以用其他方法吗??
问题内容: 我正在执行我的Maven构建,它将引发此异常: 我这样映射: 我正在使用InnoDB创建列,如下所示: 这样不行吗 为什么说他正在寻找tinyint? 问题答案: 将@Basic用于基本整数。您始终可以尝试将您的ID声明为Long。我通常总是使用Long作为我的ID。请参阅映射标识符属性:
问题内容: 在hibernate状态下,是否可以定义一个类到一组枚举的映射? 我已经找到了有关如何定义集合映射的示例,也已经找到了有关如何映射枚举的单独示例,但是我无法弄清楚如何为一个类定义枚举。 有人可以给我提供一个例子吗? 它是基于现有应用程序构建的,因此无法更改数据库架构。 这就是我要建模的关系。Wicket是普通类,而WicketType是Java枚举。 再次感谢 问题答案: 难道这不是你
我必须使用JPA+Hibernate做一个项目,其中我使用了3种方言:mysql5innodbdealication、mssql2012dealication和oracle12cdealication。 现在我有一个规范,它告诉我对于来自: > Oracle数据库,我必须使用NVARCHAR2(LENGTH)数据类型 MySql数据库,我必须使用VARCHAR(LENGTH)数据类型 @colum
我正试图将数据从SQL Server同步到Dynamics CRM。 我用C#创建了一个解决方案/项目。在同步CRM的一个帐户实体时,所有的详细信息,如姓名、帐号、发货日期、电话号码所有这类详细信息都是成功同步的,因为表单SQL中的数据类型是或,而在CRM中是单行文本。 但是,当我从到CRM的查找字段执行相同的同步时,它不起作用,并出现异常。 这里,account是CRM中实体的名称,SalesC