1、在SQLQuery.addScalar 时,查询结果集List<Object[]> ,Object[]数组中的顺序同addScalar的顺序是一致的。
且使用addScalar的话,查询结果的每个字段都需要增加,否则结果为NULL,都需要大写
SQLQuery query = getSession().createSQLQuery(nativeSql);
if(scalarList!=null&&scalarList.size()>0){
for(Entry<String, Type> entry : scalarList){
query.addScalar(entry.getKey(), entry.getValue());
}
}
String nativeSql = "SELECT ID as ID,name as NAME,LOGIN_NAME as LOGINNAME,CREATE_TIME as TIME FROM T_USER WHERE LOGIN_NAME=?";
List<Entry<String, Type>> scalarList = new ArrayList<Entry<String,Type>>();
Map<String, Type> map = new HashMap<String, Type>();
//hibernate4写法
map.put("ID", LongType.INSTANCE);
map.put("NAME", StringType.INSTANCE);
map.put("LOGINNAME", StringType.INSTANCE);
map.put("TIME", DateType.INSTANCE);
scalarList.addAll(map.entrySet());
List<Map> rs = dao.findNativeQuery(nativeSql, -1, -1, scalarList, new Object[]{"vinfai"});
通过Map.entrySet()导致scalarList无序,结果不能通过Object[i]的形式来取的,因为类型无法确定。
解决方法:1、确定scalarList的次序
2、设置Transformer属性,则可将放回的结果的每一行放到MAP中(List<Map>),KEY:为DB中名称一致,或者别名 query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
通过MAP形式读取.
Map map1 = (Map)rs.get(i);
Long id = (Long)map1.get("ID");
String name = (String)map1.get("name");
String loginName = (String)map1.get("LOGINNAME");
Date createTime = (Date)map1.get("TIME");
2、oracle的char字段在hibernate里映射为character类型,是varchar的子集。
可通过设置scalar解决
3、复杂SQL用createSQLQuery方法查询没问题,如果查询多个字段,遍历用object[]造型,下标从0开始输出值,不需要映射文件;如果愿意可以写一个映射bean,方便取用。
query.setResultTransformer(Transformers.aliasToBean(Person.class)));
PS:有任何错误,请大家批评指正,谢谢!
分享到:
相关推荐
然而,尽管Hibernate提供了强大的HQL(Hibernate Query Language)和Criteria API,但在处理某些特定的、复杂的SQL查询时,可能无法满足需求,这时就需要用到“原生的Native SQL查询”。 Native SQL查询允许我们...
首先,本地SQL查询(Native SQL)是指直接在Hibernate中使用原生的SQL语句进行查询,而不是使用HQL(Hibernate Query Language)。这允许开发者充分利用SQL的功能,比如进行复杂的统计计算或者处理特定数据库的特性...
总结起来,在Hibernate3中,通过Native SQL查询部分字段并映射为具体对象,主要步骤包括: 1. 使用`Session.createSQLQuery`创建`SQLQuery`对象。 2. 设置SQL查询语句,并用`setParameter`传入参数。 3. 使用`...
在 Hibernate 中,使用 SQLQuery 可以执行 Native SQL 查询,控制查询的执行是通过 SQLQuery 接口进行的,通过执行 Session.createSQLQuery() 获取这个接口。下面将详细介绍如何使用这个 API 进行查询。 标量查询...
使用本地sql语句查询后,无需再使用Object对查询结果进行强制转换,而是直接将查询结果放到实体Bean里了。 PS: 其实只有一版,这里只所以叫最终版是因为该附件我上传了好几天传不上去,到最后报告说‘资源已经存在...
在Java的持久化框架Hibernate中,执行原生SQL(Native SQL)是常见需求,尤其是在处理特定数据库特性或者优化性能时。本篇文章将详细介绍在Hibernate中执行原生SQL的几种方式,以及它们各自的适用场景和优缺点。 1....
在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者通过面向对象的方式来操作数据库,而无需直接编写SQL语句。在这个场景中,我们将探讨如何使用Hibernate与SQL Server 2005数据库进行...
有时候,我们可能需要执行一些更复杂的SQL查询,这时可以使用Hibernate的Native SQL查询功能。示例如下: ```java String sql = "SELECT b.name, COUNT(a.fee), MIN(a.chargeBeginTime), MAX(a.chargeEndTime) " + ...
总结来说,Native SQL查询在Hibernate中提供了对数据库的直接访问,允许开发者利用SQL的强大功能,同时保持了与ORM框架的兼容性。虽然HQL通常更为简便且易读,但在处理复杂查询或充分利用数据库特性时,Native SQL是...
### Hibernate映射主键生成策略native #### 一、引言 在ORM(对象关系映射)技术中,Hibernate作为一款流行的Java持久层框架,在处理数据持久化方面提供了丰富的功能和灵活性。其中,主键生成策略是Hibernate配置...
总结来说,Hibernate为Java开发者提供了与SQLServer数据库交互的简便方式,减少了对SQL的直接操作。通过配置、实体类映射、Session工厂和Session操作,我们可以实现对数据库的CRUD操作。在实际项目中,还需要考虑...
在"hibernate sql案例"中,我们将深入探讨如何利用Hibernate进行SQL查询,以及它提供的各种高级特性。 首先,Hibernate的核心是ORM(Object-Relational Mapping),即对象关系映射。它将数据库中的表映射为Java类,...
hibernate native Sql Rounding necessary 解决
HQL是Hibernate提供的面向对象的查询语言,类似于SQL,但更加面向对象。它的优点在于可以与Java对象直接交互,避免了SQL与对象之间的转换。例如,以下是一个简单的HQL查询示例: ```java Query query = session....
Hibernate 支持 native SQL 操作,可以使用原生 SQL 语句来查询对象。 性能 Hibernate 的性能可以通过一级缓存和二级缓存来提高。一级缓存可以缓存对象的状态,二级缓存可以缓存查询结果。 Hibernate 也支持第三方...
在Hibernate框架中,进行数据库操作时,开发者可以选择使用两种不同的查询语言:NSQL(Native SQL)和HQL(Hibernate Query Language)。这两种查询方式各有优势,在不同的场景下使用可以达到最佳的效果。 ##### 一...
"hibernate多种查询方法"则表明教程会涉及HQL(Hibernate查询语言)、Criteria API、Query API以及可能的Native SQL查询。 **Hibernate框架核心知识点** 1. **对象关系映射(ORM)**: Hibernate是ORM工具,它允许...