1. 程式人生 > >org.hibernate.MappingException: No Dialect mapping for JDBC type: -9解決

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   #指定方言類