You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server执行Hibernate查询报错,MySQL正常问题求助

Hibernate连接SQL Server时JDBC类型映射错误的解决方案

问题场景

  • 执行以下Hibernate原生SQL查询:
String userIdQueryString = "select distinct user_id from l_catalog_user_object_access  where REPORT_HEADER_ID in (" + " select REPORT_HEADER_ID from l_report_header_data " + " where report_types_id in (select REPORT_TYPES_ID from l_report_types where display_value like '%Report') )" + " and user_id = :userId"; 
  • 连接MySQL时查询正常执行,但连接SQL Server时抛出错误:
org.hibernate.MappingException: No Dialect mapping for JDBC type: -9
  • 当前SQL Server方言配置:
hibernate.connection.driver_class=com.microsoft.sqlserver.jdbc.SQLServerDriver
hibernate.dialect=org.hibernate.dialect.SQLServerDialect
  • MySQL方言配置(正常运行):
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.dialect=org.hibernate.dialect.MySQLDialect

解决方案及建议

1. 更换适配SQL Server版本的方言

org.hibernate.dialect.SQLServerDialect是针对旧版SQL Server(2000/2005)的方言,若使用SQL Server 2008及以上版本,需替换为对应版本的方言:

  • SQL Server 2008:org.hibernate.dialect.SQLServer2008Dialect
  • SQL Server 2012+:org.hibernate.dialect.SQLServer2012Dialect
  • Hibernate 5.4+:可直接使用更新后的org.hibernate.dialect.SQLServerDialect

修改配置示例:

hibernate.dialect=org.hibernate.dialect.SQLServer2008Dialect

2. 显式指定查询返回类型

在执行查询时,通过addScalar强制指定user_id的Hibernate类型,避免自动推断出错:

Query query = session.createSQLQuery(userIdQueryString)
    .addScalar("user_id", StandardBasicTypes.LONG) // 根据实际字段类型调整,如STRING/INTEGER
    .setParameter("userId", userId);
List<Long> result = query.list();

注:需匹配SQL Server中user_id的实际数据类型,例如字段为NVARCHAR则使用StandardBasicTypes.STRING。

3. 统一字段数据类型映射

检查SQL Server与MySQL中user_id的字段类型差异:

  • 若SQL Server中为NVARCHAR,而旧方言无法正确映射其对应的JDBC类型-9,可在查询中显式转换类型:
select distinct CAST(user_id AS VARCHAR(50)) as user_id from l_catalog_user_object_access ...

4. 升级依赖版本

旧版Hibernate或SQL Server JDBC驱动可能存在类型映射bug,建议升级:

  • Hibernate:优先使用5.4.x及以上稳定版
  • SQL Server JDBC驱动:更换为com.microsoft.sqlserver:mssql-jdbc最新稳定版

内容的提问来源于stack exchange,提问作者purush

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 05:22:17