程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> No Dialect mapping for JDBC type:

No Dialect mapping for JDBC type:

編輯:MySQL綜合教程

通過hql 語句沒有問題,通過sql 就會有問題, 原因就是sql 在查找的字段中包含了mediumtext這類的字段類型,報錯了,ejb 中 在sql 會報錯。將其改成varchar類型就好了.

 

錯誤Exception:  
 org.hibernate.MappingException: No Dialect mapping for JDBC type: -1  
     at org.hibernate.dialect.TypeNames.get(TypeNames.java:56)  
     at org.hibernate.dialect.TypeNames.get(TypeNames.java:81) 


問題原因:數據庫表中有text類型的字段,而Hibernate在native查詢中沒有注冊這個字段,因此發生這個錯誤。 

解決方法 :寫一個類、修改hibernate配置文件。 寫一個Dialect的子類,這裡我 extends MySQL5Dialect類:  
 package xxx.xxx;    //xxx.xxx自己根據情況來寫  import java.sql.Types;  
 import org.hibernate.dialect.MySQL5Dialect;  
 public class DialectForInkfish extends MySQL5Dialect {  
     public DialectForInkfish() {  
         super();  
         registerHibernateType(Types.LONGVARCHAR, 65535, "text");  
     }  
 }  
修改Hibernate配置文件hibernate.cfg.xml,把 
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>  
修改為: 
<property name="dialect">com.ibm.crl.inkfish.config.DialectForInkfish</property>  
hibernate ntext 問題: 
1.先用FrontEnd Plus反編譯SQLServerDialect,發現SQLServerDialect繼承SybaseDialect,繼承 Dialect,Dialect中有registerHibernateType方法,再查看SybaseDialect構造中 registerColumnType沒有注冊ntext類型。
到了這一步就明朗了,原來是Hibernate的hibernate.cfg.xml中dialect沒有注冊ntext的類型。那好,自己注冊一個吧。
2.定義MySQLServerDialect 

  MySQLServerDialect 

3.在hibernate.cfg.xml中使用MySQLServerDialect 

  

 

再次運行程序,一切OK

原文鏈接:http://itlife365.com/blog/read.php/472.htm

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved