5-Hibernate的事务、监听器及优化策略摘要.pptVIP

5-Hibernate的事务、监听器及优化策略摘要.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * * * * * 4 * * * * * * * * * * IBM Software Group Hibernate Hibernate的事务、监听器及优化策略 学习目标 事务的高级应用 多条件查询 拦截器和监听器 Hibernate优化策略 分布式缓存的分析 分布式(集群)缓存和中央缓存。 使用缓存的条件 1.读取大于修改。 2.数据量不能超过内存容量。 3.对数据要有独享的控制。 4.可以容忍出现无效数据。 事务 JDBCTransaction 使用hibernate中使用事务如下: 单个数据库(一个SesisonFactory对应一个数据库),由JDBC实现。 Session session = null; Transaction tx =null; try { session = sessionFactory.openSession(); tx = session.beginTransaction(); //process,处理一系列的数据更新操作 mit(); } catch(HibernateException e){ if(tx != null)tx.rollback();throw e; }finally { if (session != null)session.close(); } 在JDBC中使用事务,代码如下: connection.setAutoCommit(false); mit();conn.rollback(); JTA事务 JTATransaction 可以简单的理解成跨数据库的事物,由应用JTA 容器实现;使用JTATransaction需要配置hibernate.transaction.factory_class参数,该参数缺省值是org.hibernate.transaction. JDBCTransactionFactory,当使用JTATransaction时需要将该参数改成org.hibernate.transaction.JTATransactionFactory,并配置jta.UserTransaction参数JNDI名(Hibernate在启动JTATransaction时要用该值到JNDI的上下文Context中去找javax.transaction.UserTransaction)。 javax.transaction.UserTransactin tx = context.lookup(“jndiName”); try{ tx.begin(); //多个数据库的session操作; //session1…. //session2…. mit(); }catch(Exception e){ tx.rollback(); throw e; } 事务边界 关于getCurrentSession()方法: sessionFactory.getCurrentSession()可以完成一系列的工作,当调用时, hibernate将session绑定到当前线程,事务结束后,hibernate 将session从当前线程中释放,并且关闭session。当再次调用getCurrentSession ()时,将得到一个新的session,并重新开始这一系列工作。 这样调用方法如下: Session session = HibernateUtil.getSessionFactory().getCurrentSession(); getCurrentSession和openSession的区别: getCurrentSession创建的session会和绑定到当前线程,而openSession不会。 getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而openSession必须手动关闭 在Hibernate.cfg.xml文件中添加配置: property name=current_session_context_classthread/property Hibernate事务的高级应用 使用ThreadLocal: 这个类提供了一个线程本地的变量。这些变量在被共享访问的情况下在不同的线程里是独立的(必须通过get和set方法来访问)。该类提供了一个机制可以防止多线程访问带来的不安全机制。如果有些情况希望不同的线程保存的变量各自分开,那用这个还是比较合适的。 ThreadLocal这个类本身不是代表线程要访问的变量,这个类的成员变量才是。JDK1.5给ThreadLocal加了泛型功能,即是ThreadLocalT,这个泛型T即是要线程的本地变量。线程通过ThreadLocal

文档评论(0)

宝贝计划 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档