在开发项目中,遇到了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());
}
}
本文介绍了在使用Hibernate框架时遇到的关于Text数据类型的两个bug及其解决方案。当使用MySQL的Text类型字段并尝试通过createSQLQuery进行查询时会出现MappingException错误。文章提供了两种解决方法:一是改用HQL查询,二是通过自定义Dialect来支持Text类型。
3656

被折叠的 条评论
为什么被折叠?



