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操作了.