`

Hibernate源码研究碎得(1)

阅读更多

1, Collections.unmodifiableMap( new HashMap(0) );

          看到了这样的语句,不知道个unmodifiableMap在实际中有什么用?

         是说整个执行过程中,某一个变量所指向的Instance没有是不可modifiable的吧?而不是这个Map中的具体内容. 这样再结合应用的上下文就通了.

 

2,Hibernate中有个SecondPass的概念,这个是干啥用的?

      看源码时,它的实现类中有这样的关系:

           接口SecondPass有两个直接实现类:

                      CollectionSecondPass和ManyToOneSecondPass,另还有一个继承于此接口的子接口QuerySecondPass

                        CollectionSecondPass在HbmBinder类中又定义了一个static的类名为HbmBinder.CollectionSecondPass,   这个静态类在HbmBinder中又分别有三个子类(也是静态的)它们是IdentifierCollectionSecondPass,ListSecondPass,MapSecondPass.

 

                        ManyToOneSecondPass这个类也是静态的,它也是在HbmBinder类中定义的内部类.

                  QuerySecondPass接口有两个实现类ResultSetMappingSecondPass和    NamedSQLQuerySecondPass,这两个类都ResultSetMappingBinder的子类.

 

 

3,Hibernate N步曲:

    1>,new Configuration(): 找hibernate.properties文件,初始化所有Listeners,classes,imports,secondPasses....

    2>,configure(): 找到hibernate.hbm.xml文件,将其中的元素解析出来放到Configuration类中的相应的properties里,据cfg.xml文件中指定的hbm.xml名称找到并解析XXX.hbm.xml文件,将配置放到Configuration类中相应的属性中,如classes,imports,collections,tables,sqlFunctions,namedQueries....

    3>,buildSessionFactory:据第二步中生成的Configurations类中的相应属性生成CRUD相关的Sql语句,identifierGenerators,entityPersisters,collectionPersisters... 这一步是Mapping路上实质性的一步.

    4>,有了第三步的准备,就可以调用Session接口中面向对象的CRUD操作了.

28
6
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics