org.hibernate.MappingException:没有JDBC类型的方言映射:-9

org.hibernate.MappingException:没有JDBC类型的方言映射:-9,jdbc,Jdbc,当我试图从SQLServer2008中的表中获取记录时,得到了一个名为:org.hibernate.MappingException:没有JDBC类型的方言映射:-9为什么 尽管配置文件是正确的。我更改了查询,并显式地将其转换为varchar,结果成功了 String myquery = "select cast(t2.name as varchar) column_name from sys.objects t1 inner join sys.columns t2 on t2.object_i

当我试图从SQLServer2008中的表中获取记录时,得到了一个名为:org.hibernate.MappingException:没有JDBC类型的方言映射:-9为什么


尽管配置文件是正确的。

我更改了查询,并显式地将其转换为varchar,结果成功了

String myquery = "select cast(t2.name as varchar) column_name from sys.objects t1 inner join sys.columns t2 on t2.object_id = t1.object_id"+
" left join sys.indexes t3 on t3.object_id = t1.object_id and t3.is_unique = 1 left join sys.index_columns t4 on t4.object_id = t1.object_id and t4.index_id = t3.index_id and t4.column_id = t2.column_id where (upper(t1.type) = 'U' or upper(t1.type) = 'V') and upper(schema_name(t1.schema_id)) = 'dbo' and upper(t1.name) = 'TEST'"; 

这是hibernate映射类型的问题

你可以扩展方言。 例如:


将该类用作方言类。

如果您以数据库中存储的数据库表数据的不同格式访问数据库表数据,则会出现此问题 例子: 在数据库中,列类型为“nvarchar”,通过hibernate以字符串形式访问数据。
为了避免这种情况,您可以在hibernate中添加标量,它将根据需要显式转换列数据。在执行hbm.xml文件中的查询时,可以在java中添加标量。

Am使用Hibernate4.0从Sqlserver2008I获取数据时遇到了相同的问题,@lephix的答案解决了这个问题,您应该将其标记为正确。这个类应该在哪里实现?在哪个包中?你可以在任何你想要的地方实现它。只需将其配置为HibernateXML文件中的方言类。
public class SQLServerDialectOverrider extends SQLServerDialect{
    public SQLServerDialectOverrider() {
        super();
        registerHibernateType(Types.NVARCHAR, Hibernate.STRING.getName());
        registerHibernateType(Types.LONGVARCHAR, Hibernate.TEXT.getName());
    }
}