摘要: 使用将若干相似的类映射为单表,对拥有许多特殊数据的类使用具体表继承.对高层次使用类表继承,对低层次使用具体表继承.Single Table Inheritance在DB中将类继承层次设计为一个单表,表中各列代表不同类中的所有域.运行机制每个类负责把与之相关的数据保存在表的一行中.表中其它不相关的列留空.通过表中的Type字段来决定向内存中加载对象时,应该实例化那个类来创建该对象.可以直接使用类名称或者需要经过翻译的Code域.保存数据的代码可以由层超类负责.使用时机优点只需要关注一个DB表.获取数据时不必进行连接.对继承层次的重构(在父子之间挪动某个域)不需要修改DB.缺点DB表的列和对象的域 阅读全文
posted @ 2014-01-17 17:32 robynhan 阅读(363) 评论(0) 推荐(0) 编辑
摘要: Embedded Value把一个对象映射成另一个对象表中的若干字段.OO系统中会有很多小对象(DataRange,Money).而作为表在DB中毫无意义.默认想法是把一个对象保存为一个表.但是,将这些小对象,映射为该对象所有者记录中的若干字段.运行机制可以看做一种特殊的依赖映射.该值对象是一个依赖者对象.由所有者完成对依赖者的加载和保存.使用时机简单的值对象.由于没有ID.所以更新时不需要标识映射来同步.所以不需要DB表来对应.一般,只用在简单的依赖者上.只在一对一关联关系时,才使用.或者依赖者数量很少且固定时.如果想在SQL查询中使用依赖者值时,需要使用它.对于复杂的依赖关系(巨大的对象子 阅读全文
posted @ 2014-01-17 14:39 robynhan 阅读(438) 评论(0) 推荐(0) 编辑
摘要: 让一个类为其子类(泛意上的)执行DB映射一些对象肯定会出现在另一对象的上下文中.此时,使用另一对象的Mapper来执行第一个对象的映射,来简化映射过程.运行机制在DB持久化时,依赖者类依赖于所有者类.每个依赖者只能有一个所有者.活动记录和行数据入口依赖者类的映射代码都写在所有者中.数据映射器没有依赖者的映射器类,在所有者的映射器中完成依赖者的映射代码.表数据入口根本没有依赖者类.在所有者中完成对依赖者的处理.通常,加载一个所有者时,会把相关的依赖者加载.当该相关加载耗费很大时,会使用延迟加载.依赖者没有标识域.也就不用存储到一个标识映射中.不能通过ID由查找方法加载.从而没有依赖者的查找器,而 阅读全文
posted @ 2014-01-17 12:24 robynhan 阅读(628) 评论(0) 推荐(0) 编辑
摘要: 把关联保存为一个表,存储关联表的外键在对象中,使用集合作为域值,来处理多值域.而在DB中,只能有单值域.外键映射的核心,是在关联关系的单值端使用外键来维持联系.而在多对多的关联关系中,已经不存在单值端了.运行机制使用一个链接表来保存关联关系.仅有两个字段,即两个关联表的外键ID.对于每一对相关联的对象,它会有一个数据行与之对应.链接表没有对应的内存对象.所以也就没有ID.其主键是两个关联表的主键的组合.从链接表中加载Data需要两次查询,例如为雇员加载机能的问题1,查询EmployeesSkills表,得出该雇员关联的所有行.2,根据这些关联行的ID,查找出所有的机能对象.当内存中已存在这些信 阅读全文
posted @ 2014-01-17 11:00 robynhan 阅读(395) 评论(0) 推荐(0) 编辑
摘要: 把对象间的关系映射到DB表键的外键引用对象之间可以通过对象引用来互相直接访问.运行机制关键是标识域.一对一的关联.使用一个DB的外键取代.一对多的对象集合.不能在DB中把相连的对象集合都保存了.必须颠倒引用的方向一张唱片有多个曲目,那么在曲目表中保存唱片的外键.更新时较为麻烦插入和删除在多的一方(曲目)是依赖映射时(只能被唱片所拥有,而不能被其它处引用).容易实现.删除与唱片相连的所有曲目,再把唱片中所有当前曲目记录插入进来.加入一个向后指针为了让关联双向化.在曲目上加入一个指向唱片的链接.改变了对象模型,可以以处理单值域的技术来处理更新.进行一次区分通过数据库的当前状态区分.从DB中重读(曲 阅读全文
posted @ 2014-01-17 10:20 robynhan 阅读(461) 评论(0) 推荐(0) 编辑