对象–关系元数据映射模式是用来描述数据库中域是如何对应到内存对象中的域的,它包括元数据映射、查询对象、资源库三种模式。
元数据映射:在元数据中保持对象–关系映射的详细信息
该模式最主要的决策是如何根据运行代码来表示元数据中的信息。解决方案有两种方法:代码生成和反射编程。
代码生成方法需要写一个程序,输入的是元数据,输出是映射实现类的源代码,这些类是在在编译前的构建流程生成的。产生的映射器类用服务器代码来部署,不需要保存到源代码控制中。
反射程序可能要求对象有一个名为setName的方法,然后通过传递适当的参数,在setName方法中运行一个调用方法。通过吧方法和域视为数据,反射程序可以从元数据文件中读入域和方法的名字,并用它们实现映射。反射的不足是比较慢,且往往会产生很难调试的代码,但它在数据库映射
该数据的另一个主要决策是:让元数据保持多大程度的复杂性。
查询对象:描述一次数据库查询的对象
查询对象是一个解释器,由多个对象组成的机构,该结构可以自身转化为一个SQL查询。可以通过引用类和域来创建这个查询,编写查询的人就能够设计独立于数据库方案的查询、且数据库方案的变化可以封装在局部。
查询对象的一个共同特征是,它能够用内存对象的语言而不是用数据库方案来描述查询。查询对象的优点带来了更高级的需求:保存数据库方案的封装性,支持多数据库,支持多模式,以及进行优化来避免多次查询。
资源库:协调领域和数据映射层,利用类似于集合的接口来访问领域对象
资源库协调领域和数据库映射层,起到类似内存中领域对象集合的作用。客户对象以陈述的方式构建查询说明,并把它们提交给资源库以获取满足条件的对象。可以向资源库中增加对象,也可以从资源库中删除对象,就像这些对象来自一个简单的对象集合,并且由资源库封装的映射代码将根据实际情形执行相应的操作。资源库封装了保存在数据存储中的兑现集以及在这些对象上执行的操作,提供一个更加符合面向对象观点的持久层实现。资源库也支持资料与和数据映射层之间实现彻底分离和单向依赖关系的目标。