由于涉及到到的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;
}
});
分享到:
相关推荐
在Java Web开发中,Struts和Hibernate是两个非常重要的框架,它们分别负责表现层和持久层的管理。Struts作为MVC(Model-View-Controller)框架,主要用于处理用户请求和控制应用程序流程;而Hibernate是一个对象关系...
在Hibernate中实现分页,主要涉及两个关键概念:`Criteria API` 和 `Pagination`。`Criteria API` 是一种更加灵活和类型安全的查询方式,可以替代传统的HQL(Hibernate Query Language)来构建动态查询。而`...
11. `delete()` 和 `delete(String entityName, Object object)`:这两个方法用于删除持久化对象,`delete()`是基于对象实例,而`delete(String entityName, Object object)`则是基于实体名称和对象。 12. `...
在Hibernate中,一对一关系表示两个实体之间存在唯一对应的关系。配置一对一关系,通常需要在映射文件或注解中设置`@OneToOne`标签。查询和过滤一对一时,可以通过`Session.get()`或`Session.load()`方法直接获取...
在HQL中,分页可以通过`setFirstResult()`和`setMaxResults()`方法实现,这两个方法同样适用于Query对象。例如: ```java Session session = sessionFactory.openSession(); String hql = "from User"; Query query...
Hibernate 是一个功能强大且流行的 ORM(Object-Relational Mapping,对象关系映射)框架,它提供了多种查询方式和优化策略,以满足不同的应用场景和性能要求。在本节中,我们将详细介绍 Hibernate 的查询机制和优化...
`between`和`not between`操作则通过`Restrictions.between()`和`Restrictions.not(Restrictions.between())`实现,它们用于筛选介于两个值之间的记录或者不在这个范围内的记录。 6. **聚合函数与分组**: Criteria...
Struts2和Hibernate是两种非常重要的Java Web开发框架,它们在企业级应用中广泛使用。Struts2作为MVC(模型-视图-控制器)框架,主要负责处理HTTP请求,控制应用程序流程,以及呈现用户界面。而Hibernate则是一个...
有两种方式设置多个参数,一种使用 "?" 占位符,另一种使用 ":paramName" 标记。 ```java // 使用 "?" 占位符 String hql = "from User as user where user.loginName=? and user.orgId=?"; Query query = session....
类型转换失败,两个类之间没有继承关系。检查代码中涉及的类实例和它们的类型。 13. **java.lang.IllegalArgumentException: Parameter XX does not exist as a named parameter in [HQL 语句]** HQL查询中引用了...