hibernate中遇到的问题

 1. 懒加载问题

      当我们检索一个对象时,在默认情况下返回的致使该对象的普通属性,当用户使用对象属性时,才会向数据库中发出一次使用,这种现象称之为ilazy现象

其中在hibernate查询有两种的解决方案,分别是get()和load(),而load()拥有懒加载的特性。它的好处就是可以减少程序本身因为与数据库频繁的交互    

造成的处理速度缓慢。

      解决方案:       1.显示初始化Hibernate initized(代理对象)

                                  2.修改对象关系文件 lazy改写为lazy=false

                                  3.通过struts2的过滤器(web项目)openSessionInView()

  在这里我只是简单的提一下,网上也有很多关于懒加载的问题,例如:  http://blog.csdn.net/aspdao/article/details/5472955


2. 级联操作     当进行某个操作的时候,由hibernate自动完成

      例如:当删除一个部门的时候,部门里的职员也不在存在

    配置文件中

 

 

    Java代码中

      

     演示级联操作的 save-update

        在配置文件中

        

        在Java代码中

          

         

              一般将cascade配置在one-to-many(one的一方)和one-to-one(主对象的一方)

3.缓存机制

     一级缓存原理(Session缓存):当数据库中找到相应的数据,则放入一级缓存。在session作用域中如果再次查找到这条数据就直接从session中查找这条数据

         一级缓存的细节问题:

           3. 1.  什么操作向一级缓存中放入数据:

                     save、update、saveOrUpdate、load、get、lis、iterate、lock等操作

                   

          3.2.什么操作会直接从一级缓存中取数据 Get、load、list

                 Get/load会首先从一级缓存中取,如没有再有不同的操作。(get会立即相数据库中发请求,而load会返回一个代理对象,直到用户真正去使用该数据,才会向数据库   中发送请求)

          3.3一级缓存不需要配置,它本身没有保护机制,所以我们要进行使用evict或者clear来清除session缓存(evict清除session中一个对象,clear清除session中所有对象)   

         3.4当session关闭的时候,一级缓存也就没有了。

4.二级缓存(sessionFactory级缓存)

   因为一级缓存内存有限或者生命周期有限(SessionFactory的生命周期范围大),所以需要二级缓存来补充一级缓存存在的问题

      4.1.需要进行配置

      4.2 二级缓存交给第三方处理,常见的有hashtable、OSCache、EHCache

      4.3二级缓存的对象可能存放在内存中,也可以存放在硬盘中




       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值