科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道了解Hibernate的FlushMode.NEVER模式

了解Hibernate的FlushMode.NEVER模式

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

摘要: Hibernate并没有为巨型数据集合提供良好的帮助,这也许是开发者认为这样没有太大必要,反而增加Hibernate框架复杂性的缘故吧。

作者:中国IT实验室 来源:中国IT实验室 2007年9月24日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)


三、这个杀手不太“冷”


image
图片来自于电影《黑衣人》


        幸好,这个杀手不太“冷”!这都归结于Hibernate的脏检查(dirty checking)。每次装载一个对象到内存(不能去evict它)时,session始终跟踪它的修改。于是每次对数据的查询,session都将跌代所有的session中的对象并检查脏数据,将脏数据flush到数据库。Hibernate这样做的良苦用心是为了确保在执行查询之前所有可能影响查询的变化都被提交到数据库。这对零星数据量的应用来讲,不足为言。但面对数千个对象和千余次的查询来讲,它将使性能的真正杀手。
        了解真相后,我们可以使用session.setFlushMode(FlushMode.NEVER)语句将在查询时不需脏检查的数据(生物实验中的Primers)标识脏数据,这样Hibernate无处不在的代理机制将被“欺骗”,直接将它添加到脏数据列表(列表中的数据不会被flush到数据库)中,这样“杀手”就会因无处遁形而自动消失了。

四、打造制胜武器:


image
图片来自于电影《致命武器3》



        在读完这个简短的“案件”后,我们也学到了如何在一个session中读取、查询大量数据对象情况下的制胜武器- FlushMode.NEVER。当然要记住,在此过程中你不可以修改这些数据,不然就真的把数据“搞脏”了。
        使用武器秘诀如下:


        FlushMode previous = session.getFlushMode();
        session.flush(); // who know's what been done till now
        session.setFlushMode(FlushMode.NEVER);
        // Do some querying
        // Do some more querying
        // Really load up that session
        // Execute a few more queries
        // Write back to some tables
        session.flush();
        session.setFlushMode(previous);



五、联系作者:

image


        cleverpig:http://blog.matrix.org.cn/page/cleverpig

        Tim的Blog:http://www.jroller.com/page/tfenne

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章