`

mysql的text如何dialect mapping

阅读更多

在开发项目中,遇到了hibernate 的2个bug。导致出现了一些麻烦。
1、hibernate中对于数据库的Text数据类型不支持。
   hibernate 使用hql查询包含text类型字段的时候很好。如果使用native sql也就是使用  createSQLQuery方法查询text类型的时候总是报错:
org.hibernate.MappingException: No Dialect mapping for JDBC type:-1
       atorg.hibernate.dialect.TypeNames.get(TypeNames.java :56)
是hibernate与mysql的jdbc驱动配合上出现了问题:对于 mysql text类型jdbc  ResultSetMetaData.getColumnType  返回-1  ,而hibernate没有注册该类型,所以导致createSQLQuery 报 No Dialect mapping for JDBCtype: -1。

解决这个问题:要么使用hql,不使用sql,

要么继承 MySQL5Dialect  类重写方法  
import java.sql.Types;  
importorg.hibernate.Hibernate;  
import org.hibernate.dialect.MySQLInnoDBDialect;

public class MySqlDialectOverride extends MySQLInnoDBDialect{
 public MySqlDialectOverride(){  
       super();  
       registerHibernateType(Types.DECIMAL,Hibernate.BIG_DECIMAL.getName());  
       registerHibernateType(-1,Hibernate.STRING.getName());  
   } 
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics