org.hibernate.MappingException: No Dialect mapping for JDBC type: -9解决

出现环境:sqlserver数据库需要存储 䶮 这个字,发现存进去之后就变成?号如图

需要将字段改为utf8编码,sqlserver中varchar存储汉字可能会出现乱码,所以将字段改为nvarchar,然后显示正常,如图

但是当项目中用jpa进行查询时出现

org.hibernate.MappingException: No Dialect mapping for JDBC type: -9错误,Hibernate框架的方言(Dialect )没有数据库中数据类型nvarchar的映射,只有varchar类型的映射。所以在启动时出现此异常。

然后就自定义方言类

package com.hnzr.config;

import java.sql.Types;

import org.hibernate.dialect.SQLServer2008Dialect;

public class SqlServer2008Dialect extends SQLServer2008Dialect{
	public SqlServer2008Dialect() {  

        super();  
        //registerHibernateType(Types.NVARCHAR, "string"); 
        registerHibernateType(-9, "string"); 
        
        /*
         * 1.
        registerHibernateType(Types.CHAR, Hibernate.STRING.getName());   
        registerHibernateType(Types.NVARCHAR, Hibernate.STRING.getName());   
        registerHibernateType(Types.LONGNVARCHAR, Hibernate.STRING.getName());   
        registerHibernateType(Types.DECIMAL, Hibernate.DOUBLE.getName());   
        2.由于1中的Hibernate.STRING已废弃,所以用2
        registerHibernateType(1, "string");   
        registerHibernateType(-9, "string");   
        registerHibernateType(-16, "string");   
        registerHibernateType(3, "double");    */

    }
}

在application.yml中指定方言类,完美解决

server:
  port: ${port:8080}
spring:
  jpa:
    generate-ddl: false
    show-sql: true
    hibernate:
      ddl-auto: none
    properties: 
      hibernate: 
        dialect: com.hnzr.config.SqlServer2008Dialect   #指定方言类

猜你喜欢

转载自blog.csdn.net/qi923701/article/details/81911901
今日推荐