依赖映射 Dependent Mapping

让一个类为其子类(泛意上的)执行DB映射

  • 一些对象肯定会出现在另一对象的上下文中.

  • 此时,使用另一对象的Mapper来执行第一个对象的映射,来简化映射过程.

  • 运行机制
    • 在DB持久化时,依赖者类依赖于所有者类.每个依赖者只能有一个所有者.

    • 活动记录和行数据入口
      • 依赖者类的映射代码都写在所有者中.

    • 数据映射器
      • 没有依赖者的映射器类,在所有者的映射器中完成依赖者的映射代码.

    • 表数据入口
      • 根本没有依赖者类.在所有者中完成对依赖者的处理.

    • 通常,加载一个所有者时,会把相关的依赖者加载.当该相关加载耗费很大时,会使用延迟加载.

    • 依赖者
      • 没有标识域.也就不用存储到一个标识映射中.

      • 不能通过ID由查找方法加载.从而没有依赖者的查找器,而仅存在所有者的查找器.

      • 一个依赖者也可能是另一个依赖者的所有者.此时,由主所有者控制整个依赖者层次结构.

    • 内存对象中,只有所有者和依赖者的依赖者才能够拥有指向依赖者的引用.

    • Db中,除了所有者表,和拥有所有者的表之外,其它表不能拥有依赖者表的外键.

    • UML中,使用组合来表示两者之间的关系.

    • 更新
      • 由所有者来完成对依赖者的写和保存.

      • 对依赖者的更新可以通过删除和插入来完成.该过程不需要分析(直接先删除,后插入).

    • 但是,对所有者是否变化的跟踪会变得复杂.
      • 所有对依赖者的改变都要标记所有者.

      • 方案:让依赖者恒定不变.
        • 这样,对依赖者的改变,都是先移除,再插入一个新的依赖者的过程.

        • 此方案简化了DB映射,但同时耦合了内存模型和数据库映射.

  • 使用时机

  • 当一个对象制备另一个对象引用时,一般是某个对象拥有一个对应的依赖者集合时,同时依赖者又没有后向指针时.

  • 同时,如果对象本身不需要ID时,使用它简化了对象的保持管理.

  • 需要满足的前置条件
    • 每个依赖者仅有一个所有者

    • 不能存在出所有者之外的对象拥有对依赖者的引用.

  • 它是一种简化DB映射的技术,同时会使得无法从外部引用依赖者.导致根所有者的查找机制很复杂.

  • 在使用工作单元时,不要使用它.
    • 工作单元不能控制依赖者.结果会出现孤立的不被跟踪的依赖者.

时间: 2024-10-04 04:28:44

依赖映射 Dependent Mapping的相关文章

【IPC进程间通讯之三】内存映射文件Mapping File

IPC进程间通信+共享内存Mapping         IPC(Inter-Process Communication.进程间通信).         文件映射(Mapping)是一种将文件内容映射到内存地址的技术,通过对映射内存,读写文件如同读写内存一般简单.        多个进程映射同一个文件映射对象,也即多个进程映射到同一个物理存储页面,因此.当一个进程向映射内存写入数据时,其它进程能够通过映射内存读取数据.通过这个机制实现进程间通信.                  1.内存文件映

Elasticsearch - 自动检测及动态映射Dynamic Mapping

一.自动映射: ES通过查看定义某文档的json格式就能猜测到文档结构,我们称之为自动映射,在开发过程中需要注意这些特性. 字段自动检测 在某个字段第一次出现时,如果之前没有定义过映射,ES会自动检测它可能满足的类型,然后创建对应的映射. JSON数据 ES中的数据类型 null 不会添加字段 true or false boolean floating point number double integer long object object array 依赖于第一个非null得值 stri

映射(mapping)

就像是在 Data in, data out中解释过的,index中的每个document都有type.每个type都有自己的mapping或者schema definition.在type中mapping定义filed,定义每个filed中的数据类型,定义ES怎么处理这个filed,mapping也用于配置与该类型相关联的元数据. 我们会在 Types and Mappings中详细的讨论mapping,在这个章节,我们就是能让你足够开始就行了. core simple field types

映射器Mapping

1)  org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping(核心) 将程序员定义的Action所对应的<bean>标签的name属性作为请求路径 <!-- 注册控制器(程序员) --> <bean name="/add.action" class="cn.itcast.javaee.springmvc.mapping.UserAction"></

rest-assured的对象映射(Object Mapping)

rest-assured支持映射Java对象到Json和XML以及从Json和XML中映射到Java对象.Json映射需要在classpath 中有Jackson.Jackson 2或者是Gson,XML映射需要在classpath 中有JAXB. 1.JsonPath映射 例如:让我们来看一下我们想提取第一个winner到JavaBean对象中: Json数据准备: 1 {"lotto":{ 2 "lottoId":5, 3 "winning-numbe

ES 12 - 配置使用Elasticsearch的动态映射(dynamic mapping)

目录 1 动态映射(dynamic mapping) 1.1 什么是动态映射 1.2 体验动态映射 1.3 搜索结果不一致的原因分析 2 开启dynamic mapping策略 2.1 约束策略 2.2 策略示例 3 定制dynamic mapping策略 3.1 date_detection - 日期识别策略 3.2 在type中自定义动态映射模板 3.3 [过期]在index中自定义默认映射模板 1 动态映射(dynamic mapping) 1.1 什么是动态映射 动态映射时Elastic

knockoutJS学习笔记09:使用mapping插件

一.问题引出 通常,我们先定义好html结构或者模板,通过ajax向后台发起请求,后台返回json数据,然后再将json数据渲染到页面上.以博客园个人博客里的个人信息为例子,如图: 1.定义html. <p>姓名:<span data-bind="text:UserName"></span></p> <p>园龄:<span data-bind="text:BlogAge"></span&g

knockoutjs中使用mapping插件绑定数据列表

使用KO绑定数据列表示例: 1.先申请V,T,T2三个辅助方法,方便调试.声明viewModel和加载数据时的映射条件mapping 2.先使用ko.mapping.fromJS()将原来的JS对象转成 ko 中的 viewModel ,并使用ko.applyBindings() 激活Knockout 3.下面这几行代码是写在ajax success回调函数内的. 即:使用result.Data来更新viewModel,在这里实际上就是更新的users数组,更新过程中按mapping中的规则为数

Knockout应用开发指南 第七章:Mapping插件

Mapping插件 Knockout设计成允许你使用任何JavaScript对象作为view model.必须view model的一些属性是observable的,你可以使用KO绑定他们到你的UI元素上,当这些observable值改变的时候,这些UI元素就会自动更新. 绝大多数程序都需要从服务器端获取数据,但是由于服务器不知道observable的概念是什么,它只支持简单的JavaScript对象(通常是序列化以后的JSON),mapping插件可以让你很方便地将简单JavaScript对象