org.hibernate.MappingException: No Dialect mapping for JDBC type: -9解決
阿新 • • 發佈:2019-02-04
出現環境: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 #指定方言類