`
desertriver
  • 浏览: 3025 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

hibernate查询query.list()返回结果速度很慢,请指点

阅读更多
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网页显示该内容
请问上述问题应该怎么处理?十分感谢!!
分享到:
评论
2 楼 desertriver 2007-08-02  
十分感谢。
我的表结果比较简单,结构如下

属性 Id AreaName AreaTypeTableId AreaNameId ValidFlag
类型 int varchar     int              varhar int
长度 4 300      4                  50 4


这个语句的时间为3-4s,但是由于网页有四个这样的语句,总共就henduoi时间了,因为参数AreaTypeTableId不同。

另外你说的先打印能否详细点。另外我就是上面的这个函数在java文件进行调试也这样费时间


1 楼 抛出异常的爱 2007-08-02  
先打印不传到web上。。。。
分析一下。。。
用list返三百应该没什么问题。
你的表结构是怎么样的?

相关推荐

    hibernate.cfg.xml

    hibernate.cfg.xml hibernate框架的配置文件

    maven+hibernate

    8. **查询**: Hibernate支持HQL(Hibernate Query Language)和 Criteria API,它们提供了面向对象的查询方式。另外,还可以使用原生的SQL查询并通过`@NamedNativeQuery`进行配置。 在这个"Spring4Hibernate5MVC...

    Hibernate SQLQuery执行原生SQL.docx

    本文将深入探讨Hibernate如何通过SQLQuery接口执行原生SQL查询,并展示如何处理查询结果。 一、创建SQLQuery对象 在Hibernate中,我们通常通过Session接口的createSQLQuery方法来创建SQLQuery对象,例如: ```...

    Hibernate SQLQuery 本地查询

    return query.list(); } ``` 在这个方法中,我们可以看到如何将参数映射到SQL查询中,以及如何获取查询结果。开发人员可以通过继承BaseDaoSupport并重写特定方法,实现对特定表的操作,而无需重复编写相同的数据库...

    Hibernate_query聚合函数查询.

    List<Employee> sortedEmployees = query.list(); ``` 在实际应用中,你还可以结合Hibernate的 Criteria 查询、Criteria API 或者 JPA 的 Query API 来实现更复杂的聚合查询,如带条件的聚合、子查询等。 总之,...

    Hibernate中的query 分页.doc

    import org.hibernate.Query; // ... public void testQuery() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); Query query = session.createQuery(...

    hibernate3.zip 包含hibernate3.jar

    5. **Query和HQL**:`Query`接口用于执行HQL查询,HQL是一种面向对象的查询语言,类似于SQL但更贴近Java编程思维。HQL允许开发者以类和对象的名称而非表和列名进行查询。 6. **事务管理**:Hibernate支持JTA(Java ...

    Hibernate查询语言.doc

    Hibernate也允许使用原生SQL查询,通过`createSQLQuery()`方法创建`SQLQuery`对象,然后可以使用`addEntity()`或`setResultTransformer()`将结果转换为对象。 总的来说,Hibernate的查询语言提供了一套灵活且强大...

    Hibernate_query查询数据表中的一个字段.

    在使用Hibernate进行查询前,首先需要进行基本的配置,包括创建hibernate.cfg.xml配置文件,设置数据库连接信息,以及实体类和表的映射文件(.hbm.xml)。 三、Entity类与表的映射 在Hibernate中,每一个数据库表都...

    hibernate将本地SQL查询结果封装成对象

    总结起来,Hibernate的本地SQL查询功能为我们提供了一种灵活的方式来执行复杂的数据库操作,同时通过`addEntity()`、`addScalar()`和`Transformers.aliasToBean()`等方法,我们可以方便地将查询结果封装成Java对象,...

    hibernate-3.2.7.ga.zip

    5. **查询语言HQL**:Hibernate Query Language,一种面向对象的查询语言,类似SQL,但更贴近面向对象的思维。 6. ** Criteria 查询**:提供了动态构建查询的能力,无需预先编写HQL,使得查询更加灵活。 7. **事件...

    Hibernate参数设置一览表

    9. **hibernate.cache.use_query_cache** 是否启用查询缓存,如果设置为`true`,可以大大提高查询性能。 10. **hibernate.jdbc.batch_size** 设置批量插入或更新的大小。增加这个值可以提高性能,但过大的批量...

    hibernate4.0使用二级缓存jar包

    <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...

    Hibernate_Query查询所有数据

    List<YourEntityName> allData = query.list(); transaction.commit(); session.close(); ``` 在这段代码中,`YourEntityName`是映射到数据库表的实体类名。`createQuery()`方法接收HQL语句,返回一个Query...

    Hibernate HQL查询.docx

    List<User> userList = query.list(); ``` 以上代码展示了如何使用 HQL 进行一个简单的查询,其结果为 User 实体的列表。 #### 四、HQL 查询类型 根据返回类型的不同,HQL 查询可以分为以下几种: 1. **单个对象**...

    hibernate-3.6.4.Final.zip

    5. 第二级缓存:Hibernate支持查询结果缓存和对象状态缓存,提高系统性能。 四、使用步骤 1. 配置Hibernate:设置hibernate.cfg.xml配置文件,包括数据库连接信息、缓存配置等。 2. 创建实体类和映射文件:实体类...

    \Hibernate_query条件查询

    List<User> users = query.list(); ``` 这里的`User`是实体类,`session`代表与数据库的会话。 2. **Criteria API** Criteria API是Hibernate提供的另一种查询方式,更加面向对象且灵活。它允许动态构建查询,...

    Hibernate_query查询数据表中部分字段.

    这样的查询结果将是一个Object数组列表,每个元素包含`field1`和`field2`的值。 4. **DetachedCriteria**: 在复杂的查询场景下,可以使用DetachedCriteria来预定义查询条件,然后在需要时再与其他查询组合使用。...

    hibernate sql query.pdf

    hibernate sql hqlsql

Global site tag (gtag.js) - Google Analytics