`

Hibernate源码研究碎得(4)

阅读更多

1, 为什么在new一个Configuration对象时要调用另一个构造方法呢?而另一个构造方法里接收一个传来的SettingsFactory的参数,难倒说在new一个Configuration时还可以另行指定自造的SettingsFactory?这就像Configuration类里的configure()方法那样?调用无参的configure()方法时就去找那个默认的配置文件,但也是另行指定配置文件的位置的.写到这里想起来了,protected这个限定词所描述的也可以在所在包的其它类里调用从而也就生成了这个可配置SettingsFacotry的Configuration对象.再实际地找着验证下(没找到.....).

可后来一看这个构造方法是protected的,再看有没有子类,没有.那这个protected的contructurer就没用了?那干嘛要多费一道手续地调用那个protected的constructurer呢?在这个无参的construturer里加上那个protected的内容不就OK了?
 也就是如下所示:

 public Configuration(){
  this.settingsFactory = new SettingsFactory();
  reset();
 }

那为什么不把这个
 this.settingsFactory = new SettingsFactory()像Configuration类的那些属性一样放到reset()方法呢?

不行这个没完,我要顺着这个settingsFactory追下去.总觉得这个SettingsFactory有事.


2,security.
hibernate.cfg.xml中能怎么配置security呢?这与Acegy的那个security有什么异同?

3,对XXX.hbm.xml文件解析时,HbmBinder.java类里的getExtendsNeeded这个方法是干啥的?这个方法所说的事以前一点也没遇到过.

留意!!!

4,Mappings这个类是针对XXX.hbm.xml这个配置文件而专门定义的,不过它自己本身没有什么新的内容,而是将Configuration中的那些与XXX.hbm.xml相关的属性都以final的形式攒到一起,再在读取XXX.hbm.xml里所有信息时以mappings.XXX的方式间接地操作Configuration中的属性,高!!!

按值传递 vs 按引用传递.

看到这里也就多多少少地意识到了点儿:想要很明了又熟练地掌握XXX.hbm.xml中的配置,把这个Mappings类弄它个烂熟于胸是有很大帮助的.


这里的名为addTable,实际上执行过程中,会利用那个key值来判断tables中有没有,若已有的话就get出来设置下里面的一些值,若没有话就new一个全新的Table,再把addTable方法里传来的参数设置到新建的Table对象中.

这个addTable方法不错,按如上所述的方法折腾出一个Table对象来(可以是new出来的,也可能是tables里已有的),再把这个Table对象又交给别的method来再处理一次.这个Table对象经过一通这么的折腾一下子升华大了!!!

5,Debug时的一点收获:看到哪个method可疑就把它加以断点,总有它出头露面的时候.


6,看Transaction这个Interface,它有三个实现类:
 CMTTrasanction,JDBCTrasanction,JTATransaction

JDBCTransaction很形象,估计也最常用,就是用JDBC来操作DB.
CMTTransaction从名字来看是Container Managed Transaction吧?与EJB有关?
JTATransaction....

在这也不是细究这三个Transaction的差别,最先想到的是这三种不同的Transaction实现是怎么告诉Hibernate的,系统默认的是JDBCTransaction?那这个默认又是在哪体现出来的?若想改为其它的两种又将在哪改?(是在hibernate.cfg.xml文件中?)如何改?像如下所示的Cache那样来配置?
 <property name="cache.provider_class">
   org.hibernate.cache.NoCacheProvider
 </property>

看下Hibernate的tutorial.

看了后发现hibernate.transaction.factory_class这么个属性配置.再看hibernate里的TransactionFactory这个Interface,它有三个实现类分别为:
 JDBCTransactionFactory,CMTTransactionFactory,JTATransactionFactory.
呵呵,再参照上面所列Transaction的三个实现类,My God!这不大名鼎鼎的Abstract Factory Pattern嘛.

从Tutorial中来看有如下的描述:defaults to JDBCTransactionFactory.这也就是说要将JDBCTransaction这个Transaction作为默认实现.这样也就回答了上面提出的问题(在哪配?如何配?):通过配置Factory的方式来间接地配置出Transaction的实现.

分享到:
评论

相关推荐

    hibernate源码包

    hibernate源码

    hibernate源码 直接使用

    标题"hibernate源码 直接使用"表明我们将探讨的是Hibernate框架的源代码,以及如何直接在项目中应用这些源代码。Hibernate是一个流行的Java ORM(对象关系映射)框架,它简化了数据库操作,将数据库交互转化为面向...

    hibernate 源码直接导入Eclipse

    4. Hibernate关键组件: - Configuration:配置对象,负责读取Hibernate配置文件(hibernate.cfg.xml),设置连接信息等。 - SessionFactory:会话工厂,根据Configuration对象生成,是线程安全的,用于创建...

    Hibernate源码

    在深入研究Hibernate源码时,可以关注以下关键点: - **实体管理**:了解实体生命周期(瞬态、持久化、托管和脱管),以及状态转换的过程。 - **HQL和Criteria API**:学习如何构建面向对象的查询,以及它们与原生...

    Hibernate源码解析(一)

    4. Hibernate源码解析 - Session的实现:Session接口的实现类通常为StatefulPersistenceContext,它管理着对象的状态和缓存。 - Transaction的实现:通常由JDBC的Connection对象实现,Hibernate通过...

    传智播客hibernate源码

    **标题与描述解析** 标题"传智播客hibernate源码"暗示了这是一个关于Hibernate框架...通过研究这些文件,学习者可以深入了解Hibernate的工作原理,提升数据库操作的技能,并了解如何在实际项目中有效地使用Hibernate。

    Hibernate源码(hibernate-orm-main.zip)

    Hibernate源码(hibernate-orm-main.zip)Source Code: Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。 它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。

    精通Hibernate源码.rar

    《精通Hibernate源码》 ...通过深入研究Hibernate源码,我们可以更好地理解ORM的工作原理,从而在项目实践中更好地运用Hibernate,提高代码质量和开发效率。同时,掌握源码也有助于定制化开发,满足特定业务需求。

    hibernate源码

    《深入剖析Hibernate源码》 Hibernate,作为一款广泛使用的开源对象关系映射(ORM)框架,为...通过对源码的深入研究,我们可以更好地利用Hibernate提供的功能,优化我们的应用,同时也能为自己的项目设计提供灵感。

    Hibernate源码解析(二)

    在本篇《Hibernate源码解析(二)》中,我们将深入探讨Hibernate这一强大的Java对象关系映射(ORM)框架的内部工作原理。这篇博客旨在帮助开发者更好地理解Hibernate的核心机制,以便于更高效地利用它来处理数据库...

    hibernate源码的学习

    Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发者使用Java对象来操作数据库,而无需直接编写SQL语句。...通过对"hibernate-one2many"的分析,我们可以深入研究和实践一对一和一对多关联关系的配置和操作。

    配套视频的Hibernate4环境搭建源码

    跟博客上视频配套的源码,hibernate 4.19

    hibernate3源码

    Hibernate是一种Java语言下的对象关系映射解决方案。 它是使用GNU宽通用公共许可证发行的自由、开源的软件。它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架。Hibernate也是目前Java...

    Struts,Spring,Hibernate源码包

    总之,深入学习Struts、Spring和Hibernate的源码,对于提升Java开发者的专业水平具有重要意义。这不仅涉及到了Web开发的基本原理,还涵盖了软件设计、框架构建和数据库交互等多方面的知识。通过这种方式,开发者可以...

    Hibernate源码解析(三)

    《Hibernate源码解析(三)》这篇文章主要探讨了Hibernate框架的深入源码解析,这是对 Hibernate 框架理解的进一步深化。在本篇中,作者聚焦于几个关键的组件和机制,帮助读者理解 Hibernate 如何高效地管理和操作...

Global site tag (gtag.js) - Google Analytics