hibernate效率问题

原创 2008年09月30日 14:41:00

下面一段《JSF第一步》书中的代码:

    public void departmentChanged(ValueChangeEvent event) {
        //取得faces上下文
     FacesContext facesContext= FacesContext.getCurrentInstance();
     try{      
      //获得选取的部门
         Department selectedDep=new Department();
         Integer departmentId=(Integer)event.getNewValue();         
         selectedDep.setDepartmentId(departmentId);  
         this.userList1=userService.depUsers(selectedDep);
      
         //准备一个用户id和姓名的选择项目列表,
         //为在诸如下拉列表之类的UI中显示它们做准备
      this.userList=new ArrayList(); 
      for (int i=0;i<userService.depUsers(selectedDep).size();i++){
          Person person=(Person)userService
                   .depUsers(selectedDep).get(i);
          this.userList.add(new SelectItem(person.getPersonId(),
                 person.getPersonName()));
         }
      
      //准备一个角色id和角色名称的选择项目列表,
      //为在诸如下拉列表之类的UI中显示它们做准备
      this.roleList=new ArrayList();  
      for (int i=0; i<userService.Roles().size(); i++) {
          Role role=(Role)userService.Roles().get(i);
          this.roleList.add(new SelectItem(role.getRoleId(),
            role.getRoleName()));
         }
     }
     catch(DbException de){
            //捕获DbException异常
            FacesMessage msg=MessageFactory.getMessage
                       (facesContext,"error_database_error","");
            msg.setSeverity(FacesMessage.SEVERITY_WARN);
            facesContext.addMessage(null,msg);
        
        }
     catch(Exception e){
            //捕获其他异常
            FacesMessage msg=MessageFactory.getMessage
                       (facesContext,"error_unexpected","");           
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
            facesContext.addMessage(null,msg);
          
        }
    }
这段代码主要是//用于在分配用户角色时用户选择一个部门后,列出该部门的人员列表和角色列表
  本来这段代码是没有什么问题的,但持久化方面用的是hibernate做的。我们都知道hibernate是延迟加载的,即要用到数据库的东西才最后加载。
     this.userList=new ArrayList(); 
      for (int i=0;i<userService.depUsers(selectedDep).size();i++){
          Person person=(Person)userService
                   .depUsers(selectedDep).get(i);
          this.userList.add(new SelectItem(person.getPersonId(),
                 person.getPersonName()));
         }
在上面的代码中由于没有完全从数据库里取出某个部门的人员列表,但在for循环时才要用到一条条语句,这样就造成了循环一次就执行一次SQL查询语句。同样角色列表也是这个问题,但人员比较多和角色也有10多个时这样就要执行好多条查询语句,这样效率就大打折扣。

关于hibernate效率问题讨论的整理

最近在csdn上看到一篇关于对hibernate性能的讨论,感觉里面很多都是nr工作经验的结晶,但还有很多是大众化的观点,现将各观点整理如下:1.hibernate和jdbc主要区别就是,hibern...
  • shuishi0
  • shuishi0
  • 2010年07月08日 17:43
  • 1216

Hibernate的n+1问题

1、在利用Hibernate操作数据库的时候,如果在实体类上设置了表的双向关联.这可能会出现Hibernate N+1的问题.         1.1、一对多:                   ...
  • zbw18297786698
  • zbw18297786698
  • 2016年04月04日 15:55
  • 992

使用hibernate前后的效率对比

      本文只从实验层面对使用hibernate前后数据操作做了测试,并记录测试数据,以直观的形式对效率做了对比。 下面对试验环境进行简要的说明:      硬件: CPU,E6500,2.33G...
  • teabook00
  • teabook00
  • 2010年05月13日 15:39
  • 1229

jdbc与hibernate性能比较总结

hibernate是对jdbc的一个轻量级封装,屏蔽了jdbc直接操作数据库的面向关系与面向对象的矛盾,采用面向对象编程,能够简化开发。   对象之间的依赖关系,继承关系我们都可以采用Hiberna...
  • jihuanliang
  • jihuanliang
  • 2012年09月11日 00:56
  • 4817

Hibernate查询优化 HQL提高效率

1、Hibernate查询性能优化 1、1
  • wodestudy
  • wodestudy
  • 2014年04月11日 21:26
  • 9793

hibernate+MySQL性能测试

一、简介 测试hibernate+MySQL在不同情况下,分别插入1万、5万、10万、30万条数据花费的时间。 运行环境:Windows7(8核,4G) 软件环境:Eclipse(T...
  • congzi0424
  • congzi0424
  • 2016年06月17日 09:55
  • 489

hibernate抓取效率问题

hibernate抓取效率问题 在csdn上面看到的……   --drop   table   #t1,#t2 create   table   #t1(userid   int   not...
  • devilzy2656
  • devilzy2656
  • 2012年11月29日 13:11
  • 238

Hibernate中OneToOne延时加载的问题-现象和原因

关于OneToOne的延迟加载(fetch = FetchType.LAZY),我觉得是非常需要注意的一个问题。它不只是存在于Hibernate中,其他的ORM persistence framekw...
  • u013613428
  • u013613428
  • 2016年08月16日 13:57
  • 1182

Hibernate之查询效率问题(转)

第一:Hibernate作为ORM,有一个ORM固有的问题,就是由于为了持久对象的同步,不能够使用批量删除和批量更新的sql,只能按照主键一条条来操作。因此效率相对JDBC来说是比较低的。然而事情也并...
  • virgoboy2004
  • virgoboy2004
  • 2009年07月28日 09:38
  • 2474

hibernate批量数据插入优化 ------用Hibernate插入1万条数据,怎么做,有什么好的优化方法吗

Hibernate批量处理: Hibernate批量处理其实从性能上考虑,它是很不可取的,浪费了很大的内存。从它的机制上讲,Hibernate它是先把符合条件的数据查出来,放到内存当中,然后再...
  • wenzhihui_2010
  • wenzhihui_2010
  • 2014年02月13日 17:10
  • 3449
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hibernate效率问题
举报原因:
原因补充:

(最多只允许输入30个字)