`
zyn010101
  • 浏览: 324920 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate的sql查询别名问题

阅读更多

    最近在项目中采用hibernate执行sql查询的时候,发现一个问题,估计是hibernate的bug,用sql进行多表关联查询的时候,发现hibernate对sql语句的别名支持不是太好,在数据库中执行没有问题的sql语句,一放到程序中就会出错,让人很是郁闷,比如:

select pc.fd_id as fd_id, sc.fd_name as courseName,
tm.fd_name as trainName,tm.doc_creator_id as creator_id,
oe.fd_name as creator,  oe1.fd_id as dept_id ,
oe1.fd_name as deptName ,oe2.fd_id as superOrg_id ,
oe2.fd_name as superOrg 
from hrt_train_plan_course pc, 
hrt_train_main tm , 
hrt_study_course sc, 
sys_org_element oe, 
sys_org_element oe1, 
sys_org_element oe2  
where pc.fd_train_main_id = tm.fd_id 
 and pc.fd_study_course_id =sc.fd_id 
 and tm.doc_creator_id = oe.fd_id 
and tm.doc_dept_id = oe1.fd_id 
and oe.fd_parentorgid = oe2.fd_id 

 sql语句在数据库中执行完全没问题,但是放到org.hibernate.Session.createSQLQuery(sql)中便会报错,fd_name 列找不到的异常,将所有的别名全部去掉,如下:

select pc.fd_id , sc.fd_name ,
tm.fd_name ,tm.doc_creator_id,
oe.fd_name ,  oe1.fd_id ,
oe1.fd_name ,oe2.fd_id ,
oe2.fd_name 
from hrt_train_plan_course pc, 
hrt_train_main tm , 
hrt_study_course sc, 
sys_org_element oe, 
sys_org_element oe1, 
sys_org_element oe2  
where pc.fd_train_main_id = tm.fd_id 
 and pc.fd_study_course_id =sc.fd_id 
 and tm.doc_creator_id = oe.fd_id 
and tm.doc_dept_id = oe1.fd_id 
and oe.fd_parentorgid = oe2.fd_id 

 

执行该查询不报错,但是所查询出来的数据完全不是在数据库中查询出来的那样,查询出来的fd_name列的值全变成了第一个fd_name的值,即hrt_study_course表fd_name的值,其他表的fd_name值也变成了hrt_study_course表中的fd_name值,最后没办法了,只能采用jdbc查询,或者将第一个sql创建为视图再用hibernate的sql查询。有哪位大神遇到过类似问题并知道答案的,欢迎一起交流。

0
0
分享到:
评论
2 楼 sliverxxm 2014-10-13  
可以想办法解决

比如:select isnull(name,'') name1 from user

加个函数处理一下,就能支持别名了.

别问我是怎么知道的,说多了都是泪啊~~~
1 楼 mjx_mujunxian 2011-11-18  
可以给列取别名 但是不能用 hibernate会自动给列去别名

相关推荐

    Hibernate+本地SQL查询SQLQuery宣贯.pdf

    这里的`{cat.*}`是Hibernate的别名语法,用于指定SQL查询中的表别名,并将其与Java实体类关联。 如果查询涉及到关联加载,比如加载子实体或集合,可以使用`addJoin()`方法: ```java List<Cat> cats = sess....

    Hibernate+本地SQL查询SQLQuery.pdf

    《Hibernate中的本地SQL查询SQLQuery》 在Java的持久化框架Hibernate中,有时我们需要使用原生的SQL查询来实现特定的数据库操作,这时就需要利用到SQLQuery接口。本篇文章将详细解析如何使用Hibernate的SQLQuery来...

    Hibernate在查询条件中创建List集合

    最后,为了防止数据的安全性问题,比如防止SQL注入,使用Hibernate的查询API可以有效避免这类风险,因为它们都是预编译的,可以自动转义特殊字符。 总结,使用Hibernate在查询条件中创建List集合是Java开发中常见的...

    day36-hibernate检索和优化 02-Hibernate检索方式:简单查询及别名查询

    本教程将深入探讨"day36-hibernate检索和优化 02-Hibernate检索方式:简单查询及别名查询"的主题,通过源码分析和实际工具的应用,来提升数据库查询的效率。 首先,我们了解Hibernate的检索方式。在Hibernate中,...

    hibernate查询语句--HQL

    ### Hibernate 查询语句 -- HQL #### 概述 Hibernate 是一个开源的对象关系映射 (ORM) 框架,它允许开发人员将 Java 对象映射到数据库表中的记录,从而简化了数据访问逻辑。在 Hibernate 中,执行查询操作的主要...

    Hibernate的Template方法以及SQL简介

    4. **别名查询** ```java Query query = session.createQuery("select o from Order o"); List<Order> list = query.list(); ``` 使用别名可以使查询语句更加简洁易读。 5. **条件查询** ```java Query ...

    Hibernate查询语言.doc

    本文主要探讨Hibernate中的查询语言,包括面向对象的查询语言HQL,QueryBy Criteria (QBC),Query By Example (QBE),以及原生SQL的使用。 1. **大小写敏感性** HQL查询语句对Java类和属性名称的大小写敏感,而...

    Hibernate数据查询

    - 避免N+1查询问题,通过一次性加载关联数据或使用JOIN查询。 - 合理配置缓存策略,减少对数据库的直接访问。 以上就是关于“Hibernate数据查询”的主要知识点。通过深入理解和熟练运用这些概念,开发者能够更加...

    Hibernate进行数据查询

    `User as user`是给User类设置别名,方便后续引用,`select user.name`则指定了返回的字段,`where age = 25`则是查询条件。 3. **查询条件** 在HQL中,可以使用各种条件语句来限制查询结果。例如,使用`=`, `<>`,...

    在Java的Hibernate框架中使用SQL语句的简单介绍

    在Java的Hibernate框架中,使用SQL语句是一个常见的需求,特别是在处理特定的数据库操作或优化查询性能时。Hibernate,作为SSH(Spring、Struts、Hibernate)三大Web开发框架之一,提供了一种优雅的方式将对象关系...

    Hibernate-HQL-查询-Query资料

    在Hibernate中,HQL(Hibernate Query Language)是专为ORM设计的一种面向对象的查询语言,它允许开发者以类和对象的方式进行数据查询,而不是直接使用SQL。本资料主要涵盖了Hibernate HQL查询的基本概念、语法以及...

    Hibernate三大类查询总结

    此外,Hibernate允许我们直接使用SQL表达式,如通过`Restrictions.sql()`方法实现,但需要注意的是,`{alias}`需要替换为查询实体的列别名。 ```java List<Cat> cats = sess.createCriteria(Cat.class) .add...

    \Hibernate_query条件查询

    HQL是Hibernate提供的面向对象的查询语言,类似于SQL,但操作的对象是对象而非表。例如,要获取所有用户,可以使用以下HQL语句: ```java Query query = session.createQuery("from User"); List<User> users = ...

    jpa 别名转实体

    但是,这种方式需要预先知道实体的ID,对于别名查询,我们通常会使用`CriteriaBuilder`和`CriteriaQuery`来构造动态查询,并使用`Root`来指定别名,然后通过`ProjectionList`将查询结果映射到实体。 5. **实体工厂*...

    hibernate查询

    Hibernate通过HQL(Hibernate Query Language)和Criteria API提供了一种面向对象的查询机制,使得开发者无需直接编写SQL,就能方便地进行数据查询。 在Hibernate配置文件中,通常会为每个实体类定义对应的映射,...

    Hibernate查询语句统一配置管理.doc

    `<sql-query>`标签中的`return`元素指定了查询结果映射到的对象类型和别名,别名用于匹配SQL查询中的占位符。 【整合Spring配置】 当项目使用Spring和Hibernate整合时,需要在Spring的配置文件中,通过...

    HQL Hibernate查询语言

    HQL(Hibernate Query Language)是 Hibernate 中的一种强大的查询语言,它看起来很像 SQL,但是不要被语法结构上的相似所迷惑,HQL 是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态和关联之类的...

    Hibernate实体查询(ceriteria)精解

    在 Hibernate 中,Criteria 查询是一种非常实用且强大的查询方式,它允许开发人员以面向对象的方式构建复杂的查询语句,而无需编写 SQL 代码。 Criteria 查询接口位于 `org.hibernate.Criteria` 包下,它是基于 ...

    hibernate 进行多表查询每个表中各取几个字段

    HQL是Hibernate的查询语言,类似于SQL,但更面向对象。在HQL中,我们可以直接指定从哪些表(实体)中查询,以及选取哪些字段。例如,如果我们想查询`User`和`Address`表中用户ID和地址信息,可以写一个如下的HQL查询...

Global site tag (gtag.js) - Google Analytics