`
newslxw
  • 浏览: 212214 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

关于hibernate的createSQLQuery两个限制

 
阅读更多
由于涉及到到的SQL查询,SQL长度超出4000字符,不得不使用createSQLQuery,
使用中发现如下两个限制如下:
1、字段别名限制,如果这个字段不是属于GROUP BY中的字段或者SUM等函数的结果,HIBERNATE就不识别。
  如:select a.name n from test a就不行
   但是 select a.name n,sum(num) as totalnum from test group by name就可以

2、SQL中字段的名称如果重复,后面字段的值就会被第一个同名字段的值覆盖。
   如:select a.name n, a.id n from test
   这个问题也不是HIBERNATE的问题,SPRING的JDBCTEMPLATE也有这个问题,
   不过这也是SQL怪异,一般SQL起别名都不会重复。
   其原因是hibernate和spring都是用映射来获取数据库值而不是用索引。
 
我考虑的HIBERNATE对原生SQL支持不好,将所有SQL查询的都用SPRING来实现了,
自己写了个rowmapper来防止别名重复被替换的问题。
下面代码之所以以数组对象返回时为了和hibernate的query.list保持一致

List list = SpringUtils.getJdbcTemplate().query(countHql, values, new RowMapper(){
								public Object mapRow(ResultSet rs, int rowNum)
										throws SQLException
								{
									ResultSetMetaData rsmd = rs.getMetaData();
									int nrOfColumns = rsmd.getColumnCount();
									if(nrOfColumns == 1)
										return JdbcUtils.getResultSetValue(rs,1);
									Object ret[] = new Object[nrOfColumns];
									for(int i=1; i<=nrOfColumns ; i++)
									{
										ret[i-1] = JdbcUtils.getResultSetValue(rs,i);
									}
									return ret;
								}
                        		
                        	});

分享到:
评论

相关推荐

    Struts + Hibernate 实现简单分页功能

    在Java Web开发中,Struts和Hibernate是两个非常重要的框架,它们分别负责表现层和持久层的管理。Struts作为MVC(Model-View-Controller)框架,主要用于处理用户请求和控制应用程序流程;而Hibernate是一个对象关系...

    Hibernate+sqlserver2000分页

    在Hibernate中实现分页,主要涉及两个关键概念:`Criteria API` 和 `Pagination`。`Criteria API` 是一种更加灵活和类型安全的查询方式,可以替代传统的HQL(Hibernate Query Language)来构建动态查询。而`...

    Hibernate API

    11. `delete()` 和 `delete(String entityName, Object object)`:这两个方法用于删除持久化对象,`delete()`是基于对象实例,而`delete(String entityName, Object object)`则是基于实体名称和对象。 12. `...

    Hibernate过滤

    在Hibernate中,一对一关系表示两个实体之间存在唯一对应的关系。配置一对一关系,通常需要在映射文件或注解中设置`@OneToOne`标签。查询和过滤一对一时,可以通过`Session.get()`或`Session.load()`方法直接获取...

    hibernate的分页

    在HQL中,分页可以通过`setFirstResult()`和`setMaxResults()`方法实现,这两个方法同样适用于Query对象。例如: ```java Session session = sessionFactory.openSession(); String hql = "from User"; Query query...

    4.Hibernate-04查询以及优化策略1

    Hibernate 是一个功能强大且流行的 ORM(Object-Relational Mapping,对象关系映射)框架,它提供了多种查询方式和优化策略,以满足不同的应用场景和性能要求。在本节中,我们将详细介绍 Hibernate 的查询机制和优化...

    Hibernate中Criteria的完整用法

    `between`和`not between`操作则通过`Restrictions.between()`和`Restrictions.not(Restrictions.between())`实现,它们用于筛选介于两个值之间的记录或者不在这个范围内的记录。 6. **聚合函数与分组**: Criteria...

    struts2hibernate

    Struts2和Hibernate是两种非常重要的Java Web开发框架,它们在企业级应用中广泛使用。Struts2作为MVC(模型-视图-控制器)框架,主要负责处理HTTP请求,控制应用程序流程,以及呈现用户界面。而Hibernate则是一个...

    Hibernate实现记录的增、删、改和查功能

    有两种方式设置多个参数,一种使用 "?" 占位符,另一种使用 ":paramName" 标记。 ```java // 使用 "?" 占位符 String hql = "from User as user where user.loginName=? and user.orgId=?"; Query query = session....

    Java常见异常

    类型转换失败,两个类之间没有继承关系。检查代码中涉及的类实例和它们的类型。 13. **java.lang.IllegalArgumentException: Parameter XX does not exist as a named parameter in [HQL 语句]** HQL查询中引用了...

Global site tag (gtag.js) - Google Analytics