Hibernate中text字段诡异出错
描述:最初的sql语句如下:
select a.game_id,ifnull(cid,0) as cid,ifnull(fullname,'') as title,format_name,file_size*1024 as size,
ifnull(c.name,'') as mobileBrand,ifnull(d.series,'') as series,ifnull(description,'') as description,ifnull
(image_url,'') as image,
concat(download_url,'.',format_name) as url,ifnull(keywords,'') as keywords
from t_game_serise a left JOIN t_games b on a.game_id=b.game_id
left join t_brand c on a.brand_id=c.brand_id
left join t_series d on a.brand_id=d.id order by b.rank
由于series,url等字段的是varchar(2000),因此在查询后由于使用了ifnull()以及concat()函数之后变成了text类型,估计是有些
字段值比较长的缘故,因为在长度比较小的情况下使用ifnull()和concat函数时并不会改变varchar类型。
问题:在使用jdbc的时候肯定是没有问题的,但在使用hibernate的时候就出错,出错信息如下:No Dialect mapping for JDBC
type: -1;原因就是由于sessionFactory.getCurrentSession().createSQLQuery(mostPopularFilmsSQL).list()造成的,具体原因
好像是和hibernate的方言有关系。
解决办法:使用cast()函数把text类型转换成char类型,改变之后的sql语句如下:
select game_id,'5012',cid,title,format_name,size,mobileBrand,cast(series AS CHAR(2000)),
cast(description as CHAR(2000)),cast(image as char(2000)),cast(url as char(2000)),cast(keywords as char(2000))
from
(
select a.game_id,ifnull(cid,0) as cid,ifnull(fullname,'') as title,format_name,file_size*1024 as size,
ifnull(c.name,'') as mobileBrand,ifnull(d.series,'') as series,ifnull(description,'') as description,ifnull
(image_url,'') as image,
concat(download_url,'.',format_name) as url,ifnull(keywords,'') as keywords
from t_game_serise a left JOIN t_games b on a.game_id=b.game_id
left join t_brand c on a.brand_id=c.brand_id
left join t_series d on a.brand_id=d.id order by b.rank
) e
上面的sql语句通过Hibernate执行顺利通过~~~
总结:hibernate的通过hql语句查询带有text字段时不会有错,当通过sql语句查询带有text字段时则会出现No Dialect mapping for JDBCtype: -1 的错误信息。
分享到:
相关推荐
本文将深入探讨如何使Hibernate支持MySQL中的`TEXT`字段,以及`MYSQLDialect.java`在这个过程中的作用。 在MySQL中,`TEXT`字段类型用于存储大量的文本数据,包括`TINYTEXT`, `TEXT`, `MEDIUMTEXT`, 和 `LONGTEXT`...
在 Hibernate 中, update 方法可以更新整个对象的所有字段。如果我们直接使用 Session.update(Object o) 方法,Hibernate 会生成一个更新所有字段的 SQL 语句。这可能会导致性能问题,特别是当某些字段类型是文本...
本篇将详细讲解如何使用Hibernate进行查询,特别是针对数据表中的一个特定字段。 一、Hibernate简介 Hibernate是Java领域的一个开源ORM框架,它简化了数据库操作,通过映射Java类到数据库表,可以将数据库操作转化...
Hibernate中对表某个字段排序,直接在配置里面实现排序功能。
标题中的“注意hibernate查单一字段和查两个以上的字段返回的结果”暗示了这个话题将围绕Hibernate框架在查询数据时,根据查询条件的不同(单个字段与多个字段)可能产生的不同结果进行讨论。Hibernate是Java领域的...
本篇文章将深入探讨如何使用Hibernate读取数据库中的Blob字段,以及涉及到的相关知识点。 首先,我们需要理解Blob类型在数据库中的含义。Blob是Binary Large Object的缩写,它是一种可以存储大量二进制数据的数据...
Hibernate存储Clob字段的方式总结涉及了在Java开发中使用Hibernate操作大型文本字段Clob的操作方法。本文主要介绍了两种操作Clob字段的方法,一种是将Clob字段直接映射为String类型,另一种是使用Clob类型进行处理。...
本文将详细介绍如何在Spring与Hibernate框架结合的情况下,有效地处理Oracle 10g数据库中的CLOB字段。 #### 一、环境配置 为了确保项目能够顺利运行,首先需要搭建好开发环境。本示例中使用的环境配置如下: 1. *...
本文将深入探讨如何使用Hibernate进行数据表中的部分字段查询,这在实际开发中是非常常见的需求。 首先,理解Hibernate的核心概念:实体(Entity)、持久化类(Persistent Class)和映射文件(Mapping File)。实体...
本篇将主要围绕Hibernate在与各种数据库字段类型对应的Java类型进行讲解,以及如何在实际项目中进行训练。 一、Hibernate与数据库字段类型的映射 1. 基本类型映射: - Integer -> int, Smallint - Long -> ...
本文将深入探讨如何在Hibernate配置中设置与数据库字段的对应关系,以及相关的Mysql数据库数据类型。 首先,我们需要理解Hibernate的核心配置文件`hibernate.cfg.xml`,在这个文件中,我们定义了数据源、持久化类...
### Hibernate根据字段生成数据库表 #### 一、概述 在软件开发过程中,特别是在进行多数据库支持的应用程序开发时,我们经常需要将同一套代码部署到不同的数据库系统上。这种情况下,手动为每个数据库创建相同的表...
本篇将详细介绍如何使用JDBC(Java Database Connectivity)与Hibernate框架来操作Oracle数据库中的BLOB字段。 首先,Oracle数据库的BLOB字段提供了对大对象的高效存储,它的性能优于LONG字段,尤其适合存储大容量...
在Java的持久化框架Hibernate中,处理大数据类型如Oracle数据库中的Clob(Character Large Object)和Blob(Binary Large Object)字段是一项重要的任务。Clob通常用于存储大量的文本数据,而Blob则适用于二进制...
### Hibernate实体映射文件字段设置默认值 在Hibernate框架中,实体映射文件(通常为`.hbm.xml`)用于定义Java对象与数据库表之间的映射关系。这其中包括了属性到数据库表列的映射、主键生成策略、以及一些高级特性...
这个接口要求我们重写一些关键方法,如`nullSafeGet()`、`nullSafeSet()`、`equals()`、`hashCode()`等,以便Hibernate知道如何从数据库中读取和写入这些字段。 ```java public class DateRangeType implements ...
hibernate@注解方式配置实体类时,利用javadoc接口生成数据库表及字段的注释说明,支持oracle、sqlserver、db2、mysql数据库。因用到java\lib\tools.jar,需要将该jar放入工程lib下(或者tomcat\lib下、或加入...
在本文中,我们将深入探讨如何在Java环境下,利用Spring和Hibernate框架处理Oracle数据库中的LOB(Large Object)字段。LOB字段通常用于存储大体积的数据,如文本、图片或视频。在实际开发中,处理这类数据时可能会...