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

时间:2012-01-24 18:14:11

标签: jdbc

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

虽然配置文件是正确的。

3 个答案:

答案 0 :(得分:10)

这是hibernate映射类型的问题。

你可以扩展方言。 例如:

public class SQLServerDialectOverrider extends SQLServerDialect{
    public SQLServerDialectOverrider() {
        super();
        registerHibernateType(Types.NVARCHAR, Hibernate.STRING.getName());
        registerHibernateType(Types.LONGVARCHAR, Hibernate.TEXT.getName());
    }
}

使用此类作为方言类。

答案 1 :(得分:3)

我更改了查询并明确地将其转换为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'"; 

答案 2 :(得分:0)

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