接着上次的内容,来看看bind中怎么解析<class>

首先,我们来看看Hibernate Mapping DTD 中怎么定义hibernate-mapping与class的关系:

添加映射的过程(2) - 解析结点<!ELEMENT hibernate-mapping (meta*, import*, (class|subclass|joined-subclass)*, query*, sql-query*)>


由此,我们可以得出结论:
1、class,subclass,joined-subclass在结构上应该是并列的。
2、subclass与joined-subclass是有关联的。

在mapping包中,我们可以看出这些关联:
1、class,subclass,joined-subclass有共同的基类 - PersistentClass。这是XML的UML建模的规则之一。
2、class对应的mapping类为RootClass
3、subclass,joined-subclass对应的mapping类都是SubClass,通过isJoinedSubclass()方法作为区别。根据“每一棵类继承树对应一个表”的策略,subclass与其根父类应该映射到同一个表;而joined-subclass则是持久化到一个属于它自己的表,即每一个子类对应一个表的映射策略。

好了,有了上面的知识作为铺垫,我们来看看Binder类中的bindRootClass方法。

bindRootClass方法的功能是解析class结点,它的工作其实很简单,就是解析class结点的属性和它下面的所有子结点:

 

整个映射的过程中,都是采用这种自顶向下逐步细化的办法来解析各个结点。在第一遍读源码的过程中,了解到此足矣。

相关文章:

  • 2022-12-23
  • 2021-09-21
  • 2021-06-25
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-27
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-10-07
  • 2021-11-17
  • 2022-12-23
  • 2022-12-23
  • 2021-08-29
相关资源
相似解决方案