public List acquierByType(int typeid)
{
Session s = null;
try
{
String SQL = "from JacArea as area where area.AreaTypeTableID =:typeid
and area.ValidFlag=1";
s = HibernateUtils.currentSession();
Query q = s.createQuery(SQL);
q.setInteger("typeid", typeid);
return q.list();
} catch (HibernateException e)
{
e.printStackTrace();
} finally
{
}
return null;
}
其中AreaTypeTableID是聚集索引,ValidFlag是索引,把查询语句直接在SQL server查询,速度很快没有问题,但当调用该函数的时候速度很慢,时间竟然达到3、4s,经过增加调试代码,发现就是return q.list()这句花费绝大部分时间,另外查询结果返回的数据不是很多,大概300条左右。因为我把返回结果用网页中的下拉框select显示,所以没有分页,但,我想300条结果也不应该这么慢吧。
请问应该怎么处理,大家遇到这样的问题了吗?
看网络上有人说用scroll()函数可以提高效率,可是关于ScrollableResults的用法在网上没有找到说明?后来看api但也不是很详细。还是不知道怎么处理。
我试着编了一下把return q.list()改写为以下代码,不过,我感觉我这个写法应该是有问题的,
下面代码中area是数据库返回的结果集的一个,ScrollalbeResults.get()得到area的各列。
ScrollableResults t=q.scroll();
while(t.next())
{
model.JacArea area = new model.JacArea();
area.setId(t.getInteger(0)); //
可是在运行的时候,提示参数空
area.setAreaName(t.getString(1));
area.setAreaTypeTableID((JacAreatype)t.get(2));
area.setAreaNameID(t.getString(3));
area.setValidFlag(t.getInteger(4));
l.add(area); //已经在函数开始声明为List类型
}
return l;
另外,我的应用是web,通过jsp网页显示该内容
请问上述问题应该怎么处理?十分感谢!!
分享到:
相关推荐
hibernate.cfg.xml hibernate框架的配置文件
8. **查询**: Hibernate支持HQL(Hibernate Query Language)和 Criteria API,它们提供了面向对象的查询方式。另外,还可以使用原生的SQL查询并通过`@NamedNativeQuery`进行配置。 在这个"Spring4Hibernate5MVC...
本文将深入探讨Hibernate如何通过SQLQuery接口执行原生SQL查询,并展示如何处理查询结果。 一、创建SQLQuery对象 在Hibernate中,我们通常通过Session接口的createSQLQuery方法来创建SQLQuery对象,例如: ```...
return query.list(); } ``` 在这个方法中,我们可以看到如何将参数映射到SQL查询中,以及如何获取查询结果。开发人员可以通过继承BaseDaoSupport并重写特定方法,实现对特定表的操作,而无需重复编写相同的数据库...
**多属性查询**:当需要查询多个属性时,查询结果将以数组形式返回。例如,“select s.Name, s.Sex from Student as s”。 **封装查询结果**:为了便于操作查询结果,可以将查询结果封装成一个新的对象。例如,...
List<Employee> sortedEmployees = query.list(); ``` 在实际应用中,你还可以结合Hibernate的 Criteria 查询、Criteria API 或者 JPA 的 Query API 来实现更复杂的聚合查询,如带条件的聚合、子查询等。 总之,...
import org.hibernate.Query; // ... public void testQuery() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); Query query = session.createQuery(...
5. **Query和HQL**:`Query`接口用于执行HQL查询,HQL是一种面向对象的查询语言,类似于SQL但更贴近Java编程思维。HQL允许开发者以类和对象的名称而非表和列名进行查询。 6. **事务管理**:Hibernate支持JTA(Java ...
Hibernate也允许使用原生SQL查询,通过`createSQLQuery()`方法创建`SQLQuery`对象,然后可以使用`addEntity()`或`setResultTransformer()`将结果转换为对象。 总的来说,Hibernate的查询语言提供了一套灵活且强大...
在使用Hibernate进行查询前,首先需要进行基本的配置,包括创建hibernate.cfg.xml配置文件,设置数据库连接信息,以及实体类和表的映射文件(.hbm.xml)。 三、Entity类与表的映射 在Hibernate中,每一个数据库表都...
总结起来,Hibernate的本地SQL查询功能为我们提供了一种灵活的方式来执行复杂的数据库操作,同时通过`addEntity()`、`addScalar()`和`Transformers.aliasToBean()`等方法,我们可以方便地将查询结果封装成Java对象,...
5. **查询语言HQL**:Hibernate Query Language,一种面向对象的查询语言,类似SQL,但更贴近面向对象的思维。 6. ** Criteria 查询**:提供了动态构建查询的能力,无需预先编写HQL,使得查询更加灵活。 7. **事件...
9. **hibernate.cache.use_query_cache** 是否启用查询缓存,如果设置为`true`,可以大大提高查询性能。 10. **hibernate.jdbc.batch_size** 设置批量插入或更新的大小。增加这个值可以提高性能,但过大的批量...
<property name="hibernate.cache.use_query_cache">true <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider 4.0配置如下: <property name="hibernate.cache.use_second_level_cache...
List<YourEntityName> allData = query.list(); transaction.commit(); session.close(); ``` 在这段代码中,`YourEntityName`是映射到数据库表的实体类名。`createQuery()`方法接收HQL语句,返回一个Query...
List<User> userList = query.list(); ``` 以上代码展示了如何使用 HQL 进行一个简单的查询,其结果为 User 实体的列表。 #### 四、HQL 查询类型 根据返回类型的不同,HQL 查询可以分为以下几种: 1. **单个对象**...
5. 第二级缓存:Hibernate支持查询结果缓存和对象状态缓存,提高系统性能。 四、使用步骤 1. 配置Hibernate:设置hibernate.cfg.xml配置文件,包括数据库连接信息、缓存配置等。 2. 创建实体类和映射文件:实体类...
List<User> users = query.list(); ``` 这里的`User`是实体类,`session`代表与数据库的会话。 2. **Criteria API** Criteria API是Hibernate提供的另一种查询方式,更加面向对象且灵活。它允许动态构建查询,...
这样的查询结果将是一个Object数组列表,每个元素包含`field1`和`field2`的值。 4. **DetachedCriteria**: 在复杂的查询场景下,可以使用DetachedCriteria来预定义查询条件,然后在需要时再与其他查询组合使用。...
hibernate sql hqlsql