日期:2014-05-16 浏览次数:20769 次
在开发项目中,遇到了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());??
???}?
}