映射对象系统与关系系统的方法、装置、计算机读存储介质及终端设备

文档序号:1087054 发布日期:2020-10-20 浏览:5次 >En<

阅读说明:本技术 映射对象系统与关系系统的方法、装置、计算机读存储介质及终端设备 (Method and device for mapping object system and relation system, computer readable storage medium and terminal equipment ) 是由 陈瑞 于 2020-05-19 设计创作,主要内容包括:公开了映射对象系统与关系系统的方法、装置、计算机可读存储介质及终端设备,属于计算机程序技术领域。其中,将对象系统转换为关系系统的方法包括以下步骤:建立对象数据模型;根据所述对象数据模型,建立映射架构;根据所述映射架构,生成映射序列;将从所述映射序列逐个获取的序列元素转换为关系。将关系系统转换为对象系统的方法包括以下步骤:建立对象数据模型;建立映射架构;指定一个实体型或显示关联型作为映射的基础类型,直至重建完成对象系统中的所有对象。该装置、介质及设备能够用于实现该方法。其能够支持多方关联、复杂关联以及显式关联。(A method, a device, a computer readable storage medium and a terminal device for mapping an object system and a relationship system are disclosed, which belong to the technical field of computer programs. The method for converting the object system into the relation system comprises the following steps: establishing an object data model; establishing a mapping framework according to the object data model; generating a mapping sequence according to the mapping architecture; sequence elements obtained one by one from the mapping sequence are converted into relationships. The method for converting the relation system into the object system comprises the following steps: establishing an object data model; establishing a mapping framework; and designating a solid type or a display association type as a basic type of mapping until all the objects in the object system are reconstructed. The apparatus, medium, and device can be used to implement the method. It can support multi-party associations, complex associations, and explicit associations.)

映射对象系统与关系系统的方法、装置、计算机读存储介质及 终端设备

技术领域

本发明涉及计算机程序技术领域,特别是涉及映射对象系统与关系系统的方法、装置、计算机可读存储介质及终端设备。

背景技术

面向对象软件开发思想将软件系统看作对象及对象之间的关系,即对象系统,系统的运行体现为对象之间的相互作用,而将系统数据的存储看作对对象系统当前状态实施的持久化操作。当前几乎所有的存储系统都采用关系型数据结构,而对象系统的结构与关系数据结构往往存在显著差异,因此自面向对象及以来,如何将对象“挤”入关系系统(通常称为ORM,即对象关系映射),一直是一个棘手的问题。传统的做法是在软件开发中编写专门的转换代码。这一工作是烦琐而枯燥的,并且通常会占据开发团队大量的时间。因此,开发人员希望编写出一种对象系统无关的通用ORM程序。微软开发的Entity Framework是最为常用的通用ORM程序之一,其存在如下技术问题:(1)不支持三个或者三个以上关联端的多方关联;(2)不支持拥有属性的复杂关联;(3)不支持定义了关联类的显式关联。

发明内容

有鉴于此,本发明提供了一种映射对象系统与关系系统的方法、装置、计算机可读存储介质及终端设备,其能够支持多方关联、复杂关联以及显式关联,从而更加适于实用。

为了达到上述目的,本发明提供的映射对象系统与关系系统的方法的技术方案如下:

本发明提供的映射对象系统与关系系统的方法包括将对象系统转换为关系系统的方法,以及,将关系系统转换为对象系统的方法,其中,

所述将对象系统转换为关系系统的方法包括以下步骤:

建立对象数据模型;

根据所述对象数据模型,建立映射架构;

根据所述对象数据模型,生成映射序列;

将从所述映射序列逐个获取的序列元素转换为关系;

所述将关系系统转换为对象系统的方法包括以下步骤:

建立对象数据模型;

根据所述对象数据模型,建立映射架构;

指定一个实体型或显式关联型作为所述映射的基础类型,直至重建完成对象系统中的所有对象。

本发明提供的映射对象系统与关系系统的方法还可采用以下技术措施进一步实现。

作为优选,所述建立对象数据模型具体包括以下步骤:

指明对象系统中对象和关联的类型,即实体型和关联型;

指明每一实体型或关联型的属性集合;

对于实体型,须进一步指明它的关联引用集合;

对于关联型,须指示其为隐式关联还是显式关联,并须进一步指明它的关联端集合;

其中,所述关联引用是定义在对象内部的指针;所述关联端是对参与该关联的对象的引用,对于关联对象,它是定义在其内部的指针;

作为优选,所述根据所述对象数据模型,建立映射架构具体包括以下步骤:

指明实体型与关联型的映射关系表;

指明所述实体型或关联型属性的映射字段;

根据所述关联端实体型的标识属性在所述关联型映射表中的映射字段,配置关联端映射。

作为优选,根据所述对象数据模型,生成映射序列具体包括以下步骤:

将对象和关联对象看作顶点,将关联引用或关联端看作边,得到基于所述顶点和边的有向图;

遍历所述有向图,加入所述顶点代表的对象或关联对象,得到映射序列。

作为优选,所述遍历所述有向图,加入所述顶点代表的对象或关联对象,得到映射序列的过程中,当边代表关联引用且其关联型为隐式时,生成一个关联实例并加入映射序列。

作为优选,所述将关系系统转换为对象系统过程中,所述指定一个实体型或显示关联型作为所述映射的基础类型,直至重建完成对象系统中的所有对象具体包括以下步骤:

根据指定的对象筛选条件,利用所述对象数据模型和所述映射架构指引生成查询所述基础类型对象的SQL语句,作为基础SQL;

选择性执行以下操作,对所述基础SQL进行扩展:

如果所述类型为实体型,遍历关联引用,对每一关联引用,联接其关联型的映射表,并将所述关联型的标识字段和属性字段追加到所述基础SQL的投影列;

如果所述类型为关联型,遍历关联端,对每一关联端,联接其实体型的映射表,并将所述实体型的属性字段追加到所述基础SQL的投影列;

对所述之关联型或实体型,再次执行上一步操作;

递归执行上述两步骤,直至联接完对象系统中所有实体型和关联型的映射表;

执行扩展后的SQL语句,得到作为查询结果的数据集;

使用所述数据集中的数据重建基础类型对象;

针对所述基础对象,使用所述数据集选择性执行以下操作:

如果为实体对象,遍历其关联引用,对每一关联引用,选择性执行以下操作:

如果为隐式关联,重建关联,并将重建的关联的右端对象设置为该关联引用的值;如果为显式关联,重建关联对象,并将重建的关联对象设置为所述关联引用的值;

如果所述对象为关联对象,遍历其关联端,重建对象,并将重建的对象设置为所述关联端的值;

针对所述重建的每一个对象,再次执行上一步操作;

递归执行上述两步骤,直至重建完对象系统中的所有对象。

上述各步骤中,遍历关联引用或关联端时,根据具体业务场景需要选取部分关联引用或关联端。

本发明提供的映射对象系统与关系系统的装置的技术方案如下:

本发明提供的映射对象系统与关系系统的装置包括:

第一转换单元,用于将对象系统转换为关系系统;

第二转换单元,将关系系统转换为对象系统;其中,

所述第一转换单元包括:

数据获取模块,用于获取对象系统数据;

数据存储模块,用于根据对象数据模型的指引,将所述对象系统数据转换为关系结构并存入关系数据库;

第一数据模型建立模块,用于根据所述存入关系数据库的关系结构,建立对象数据模型;

第一映射架构建立模块,用于根据所述对象数据模型,建立映射架构;

关系转换模块,用于将从所述映射序列逐个获取的序列元素转换为关系;

所述第二转换单元包括:

数据查询模块,用于根据对象系统形式模型的指引,从关系数据库查询数据并建立对象系统;

第二数据数据模型建立模块,用于根据所述对象系统,建立对象数据模型;

第二映射架构建立模块,用于根据所述对象数据模型,建立映射架构;

基础类型指定模块,用于指定一个实体型或显示关联型作为所述映射的基础类型,直至重建完成对象系统中的所有对象。

为了达到上述第三个目的,本发明提供的计算机可读存储介质的技术方案如下:

本发明提供的计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有将对象系统转换为关系系统的第一程序,以及,将关系系统转换为对象系统的第二程序,所述第一程序被处理器执行时,实现本发明提供的将对象系统转换为关系系统的方法的步骤;所述第二程序被处理器执行时,实现本发明提供的将关系系统转换为对象系统的方法的步骤。

为了达到上述第四个目的,本发明提供的终端设备的技术方案如下:

本发明提供的终端设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的将对象系统转换为关系系统的第一程序,以及,将关系系统转换为对象系统的第二程序,所述第一程序被处理器执行时,实现本发明提供的将对象系统转换为关系系统的方法的步骤;所述第二程序被处理器执行时,实现本发明提供的将关系系统转换为对象系统的方法的步骤。

本发明已实际应用于一个在线商品展示平台,该平台的对象系统结构如图2 所示。该对象系统的结构比较复杂,主要体现在以下几点:a.商品(Goods)、属性(Property)和属性值(PropertyValue)之间存在多(三)方关联“商品属性取值(枚举值)”;b.上述关联为显式关联,即存在一个关联对象 (GoodsPropertyValue),且该对象具有属性;c.商品和属性之间存在一个显式关联“商品属性取值(自行输入值)”,关联对象为GoodsPropertyValue;d.SKU对象不具有指向商品的外键属性,即GoodsId;e.SKU对象的属性_skuItems(包含 sku各分项)是一个集合,它映射到一个关系属性,因此需要将该集合Json序列化或反序列化;f.由于商品内部管理属性取值和SKU的业务规则非常复杂,不能使用属性访问器向外部暴露指向属性取值和SKU的关联指针,只能通过一组特定的方法进行读写。因此,现有的ORM技术(包括EF和Hibernate)均不能支持,而采用本发明提供的技术方案则可以顺利实现上述对象系统的OR映射。目前,所述在线商品展示平台已正式运行超过一个月,OR映射相关的预定需求已全部实现且运行正常。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1为本发明实施例方案涉及的硬件运行环境的映射对象系统与关系系统设备结构示意图;

图2为本发明实施例方案涉及的在线商品展示平台系统结构图;

图3为本发明实施例方案涉及的对象关系映射原理示意图。

图4为本发明实施例方案涉及的对象数据模型的基本结构示意图。

图5为本发明实施例方案涉及的映射架构示意图。

图6为本发明实施例方案涉及的对象系统示例示意图。

图7为本发明实施例方案涉及的示例对象系统建立的对象数据模型示意图。

图8为本发明实施例方案涉及的生成映射序列的算法流程图。

图9为本发明实施例方案涉及的用于重建对象系统的递归算法流程图。

图10为本发明实施例方案涉及的使用联表查询扩展基础SQL的递归算法流程图。

图11为本发明实施例方案涉及的扩展基础SQL过程中生成表联接条件的算法流程图。

具体实施方式

本发明为解决现有技术存在的问题,提供一种映射对象系统与关系系统的方法、装置、计算机可读存储介质及终端设备,其能够支持多方关联、复杂关联以及显式关联,从而更加适于实用。

为更进一步阐述本发明为达成预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明提出的映射对象系统与关系系统的方法、装置、计算机可读存储介质及终端设备,其具体实施方式、结构、特征及其功效,详细说明如后。在下述说明中,不同的“一实施例”或“实施例”指的不一定是同一实施例。此外,一或多个实施例中的特征、结构、或特点可由任何合适形式组合。

参照图1,图1为本发明实施例方案涉及的硬件运行环境的映射对象系统与关系系统设备结构示意图。

如图1所示,该映射对象系统与关系系统设备可以包括:处理器1001,例如中央处理器(Central Processing Unit,CPU),通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘 (Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真(WIreless-FIdelity,WI-FI)接口)。存储器1005可以是高速的随机存取存储器 (RandomAccess Memory,RAM)存储器,也可以是稳定的非易失性存储器 (Non-Volatile Memory,NVM),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。

本领域技术人员可以理解,图1中示出的结构并不构成对映射对象系统与关系系统设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

如图1所示,作为一种存储介质的存储器1005中可以包括操作系统、数据存储模块、网络通信模块、用户接口模块以及映射对象系统与关系系统程序。

在图1所示的映射对象系统与关系系统设备中,网络接口1004主要用于与网络服务器进行数据通信;用户接口1003主要用于与用户进行数据交互;本发明映射对象系统与关系系统设备中的处理器1001、存储器1005可以设置在映射对象系统与关系系统设备中,映射对象系统与关系系统设备通过处理器1001调用存储器1005中存储的映射对象系统与关系系统程序,并执行本发明实施例提供的映射对象系统与关系系统方法。

实施例

(一)一种将对象系统转换为关系系统的方法,根据对象数据模型的指引将对象系统数据转换为关系结构并存入关系数据库,其特征在于包含以下步骤。

建立对象数据模型(Object Data Model,简称ODM)。如图4所示,ODM 需要指明对象系统中对象和关联的类型,即实体型和关联型,指明每一实体型或关联型的属性集合。对于实体型,须进一步指明它的关联引用集合;对于关联型,须指示其为隐式关联还是显式关联,并须进一步指明它的关联端(两个或多个)集合。其中,关联引用是定义在对象内部的指针,用于引用该对象参与的一个关联(即作为该关联的一端),特定于某一关联型。在对象系统中,如果关联引用的关联型为隐式关联,它指向关联右端,如果为显式关联,它指向关联对象。关联端是对参与该关联的对象的引用,特定于某一实体型;对于关联对象,它是定义在其内部的指针。

建立映射架构。如图5所示,映射架构指明实体型和关联型的映射关系表,指明实体属性或关联属性的映射字段,配置关联端映射。关联端映射是指关联端实体型的标识属性在关联映射表中的映射字段。

生成映射序列。将对象和关联对象看作顶点,将关联引用或关联端看作边,那么整个对象系统可以视为一个有向图。遍历该图,将各顶点代表的对象或关联对象加入映射序列;特别地,如果边代表关联引用且其关联型为隐式的,生成一个关联实例并加入映射序列。

从映射序列逐个取出序列元素,即对象、关联实例或关联对象,将其转换为关系。其中,跟踪对象和关联状态为现有技术,参见MSDN技术文档“自动检测更改1”和“实体状态2”;将对象转换为关系属于现有技术,参考中国专利申请号2014106483227;将关联转换为关系为现有技术,参考MSDN技术文档“Docs>>Entity Framework>>Entity Framework 6>>创建模型>>使用EF设计器>>映射关系3”;将关联对象转换为关系的发明专利已另案申请。

(二)一种将关系系统转换为对象系统的方法,根据对象数据模型的指引从关系数据库查询数据并重建对象系统,其特征在于包含以下步骤。

建立对象数据模型。

建立映射架构。

指定一个实体型或显式关联型作为映射的基础类型。

根据指定的对象筛选条件,利用所述对象数据模型和所述映射架构指引生成查询所述基础类型对象的SQL语句,作为基础SQL。

选择性执行以下操作,对所述基础SQL进行扩展:

如果所述类型为实体型,遍历关联引用,对每一关联引用,联接其关联型的映射表,并将所述关联型的标识字段和属性字段追加到所述基础SQL的投影列;

如果所述类型为关联型,遍历关联端,对每一关联端,联接其实体型的映射表,并将所述实体型的属性字段追加到所述基础SQL的投影列。

对上一步所述之关联型或实体型,再次执行上一步操作。

递归执行上述两步骤,直至联接完对象系统中所有对象和关联的映射表。

执行扩展后的SQL语句,得到作为查询结果的数据集。

使用所述数据集中的数据重建基础类型对象。

针对所述基础对象,使用所述数据集选择性执行以下操作:

如果为实体对象,遍历其关联引用,对每一关联引用,选择性执行以下操作:如果为隐式关联,重建关联,并将重建的关联的右端对象设置为该关联引用的值;如果为显式关联,重建关联对象,并将重建的关联对象设置为所述关联引用的值;

如果所述对象为关联对象,遍历其关联端,重建对象,并将重建的对象设置为所述关联端的值。

针对上一步重建的每一个对象,再次执行上一步操作。

递归执行上述两步骤,直至重建完对象系统中的所有对象。

进一步地,上述步骤所述遍历关联引用或关联端时,根据具体业务场景需要选取部分关联引用或关联端。

实施例

(一)将对象系统转换为关系系统

第一步,建立对象数据模型。以集合entities存储实体型信息,每一项代表一个实体型,为复杂数据结构,包含4个数据项Name、Type、Attributes、 AssociationReferences,分别表示实体型名称、实体类、属性集、关联引用集。其中,关联引用也表示为复杂数据结构,包含4个数据项Name、AssociationType、 LeftEnd、RightEnd,分别表示名称、关联型、左端名、右端名。以集合associations 存储关联型信息,每一项代表一个关联型,为复杂数据结构,包含5个数据项 Name、Type、Attributes、AssociationEnds、Explicit,分别表示名称、关联类、属性集、关联端集和是否为显式关联。其中,关联端也表示为复杂数据结构,包含2个数据项Name和EntityType,分别表示名称和实体型。

下面以一个实际的对象系统为例进一步说明对象数据模型的结构。图6是一个对象系统的类型结构,包含3个实体类e0、e1、e2和两个关联类a1、a2,其中a2为三方关联,此外e0、e1之间存在关联a0。

对此对象系统建模,集合entities应有三个元素依次代表e0、e1、e2,集合associations应有三个元素,依次代表a0、a1、a2。由于a0是一个有向关联,这表明e0有一个指向e1的关联引用(记为ref0)。此外,e0参与了两个显式关联 a1和a2,一般地参与显式关联的对象内部会定义一个指向关联对象的关联引用,因此e0还有两个分别指向a1和a2的关联引用(记为ref1和ref2),因此,entities[0] 的数据项AssociationReference应有三个元素分别代表ref0、ref1、ref2。显然, ref0、ref1、ref2的数据项AssociationType依次为a0、a1、a2。

ao为隐式关联,因此数据项Explicit的值应为False。a0有两个关联端,因此数据项AssociationEnds应有两个元素。这两个关联端依次对应e0、e1,因此其数据结构中EntityType数据项的值依次为e0、e1。假定两个关联端的名称依次为end1、end2,那么Name数据项的值依次为end1、end2;由此还可以确定,实体型e0的关联引用ref1的数据项LeftEnd和RightEnd的值分别为end1和end2。

a1为显式关联,因此数据项Explicit的值为True。a1有两个关联端,因此数据项AssociationEnds应有两个元素。这两个关联端依次对应e0、e2,因此其数据结构中EntityType数据项的值依次为e0、e2。假定两个关联端的名称依次为end1、end2,那么Name数据项的值依次为end1、end2;由此还可以确定,实体型e0的关联引用ref2的数据项LeftEnd的值为end1。对于显式关联引用,不需要确定数据项RightEnd的值。

a2为显式关联,因此数据项Explicit的值为True。a2有三个关联端,因此数据项AssociationEnds应有三个元素。这三个关联端依次对应e0、e1、e2,因此其数据结构中EntityType数据项的值依次为e0、e1、e2。假定三个关联端的名称分别为end1、end2、end3,那么Name数据项的值依次为end1、end2、end3;由此还可以确定,实体型e0的关联引用ref3的数据项LeftEnd的值为end1。

图7反映了所述示例的对象数据模型。

第二步,建立映射架构。首先指定实体型或关联型的映射表,在各自的数据结构中增加一个数据项TargetTable来存储;然后指定两者所含各属性的映射字段;最后配置关联型的关联端映射。由于对象、关联、关联对象与关系的映射为现有技术或已另案申请,故不再具体说明属性和关联端的模型数据结构及映射数据结构,具体实现方案可参见相应技术文档。

第三步,生成映射序列。具体算法如图8所示。注意,如果对象图包含环,此算法会进入死循环,为避免这种现象,可以在执行Enqueue操作前增加校验逻辑,如果要排除的元素已存在于序列,则不执行此操作并立即返回。

第四步,从所述序列逐个取出元素,即对象、关联或关联对象,将其转换为关系。序列元素的状态可能为新增、已修改或已删除,分别映射到关系表的 Insert、Update、Delete操作。

(二)将关系系统转换为对象系统

第一步,建立对象数据模型。

第二步,建立映射架构。

第三步,指定一个实体型或显式关联型作为映射的基础类型。

第四步,根据指定的对象筛选条件,执行关系到对象映射,重建对象,或者执行关系到关联对象映射,重建关联对象。

第五步,按照图9所示的算法重建对象系统。注意,如果对象图中存在环,此算法会进入死循环,为避免为种情况,可以针对每一关联引用或关联端执行校验逻辑,如果当前关联引用或关联端的值不为NULL,则不执行后续操作并立即返回。

(三)将关系系统转换为对象系统

第一步,建立对象数据模型。

第二步,建立映射架构。

第三步,指定一个实体型或显式关联型作为映射的基础类型。

第四步,根据指定的对象筛选条件,利用所述对象数据模型和所述映射架构指引生成查询所述基础类型对象的SQL语句,作为基础SQL。基础SQL的结构如下:

Select[标识字段列表,]属性字段列表From映射表Where筛选条件,其中:

标识字段列表仅当基础类型为关联型时存在,它依据关联端集合生成,具体地,遍历关联型数据结构的AssociationEnds数据项,进而,对每一关联端 assoEnd遍历关联端映射集合assoEnd.Mappings,对每一映射项取出数据项 TargetField的值,依次组合成标识字段列表;

属性字段列表依据属性集合生成,具体地,遍历实体型或关联型数据结构的Attributes数据项,对每一属性取出数据项TargetField的值,依次组合成属性字段列表;

映射表为所述基础类型的映射表,其值可从实体型或关联型数据结构的TargetTable数据项中取出;

筛选条件根据实际业务场景生成。

第五步,按照图10所示的算法对所述基础SQL进行扩展。联接关系表的Join子句结构如下:

Inner Join映射表On联接条件,其中:

映射表为关联引用对应的关联型的映射表,或者为关联端对应的实体型的映射表;

联接条件按照图11所示的算法生成。

当基础类型为实体型时,扩展后的SQL结构如下:

Select

基础类型字段列表,

关联引用字段列表1,关联端字段列表1,关联端字段列表2,...,

关联引用字段列表2,关联端字段列表3,关联端字段列表4,...,

......

From基础类型映射表

Inner Join关联引用映射表1On联接条件

Inner Join关联端映射表1On联接条件

Inner Join关联端映射表2On联接条件

......

Inner Join关联引用映射表2On联接条件

Inner Join关联端映射表3On联接条件

Inner Join关联端映射表4On联接条件

......

......

Where筛选条件,其中:

关联引用字段列表序列(关联引用字段列表1,关联引用字段列表2,...)依据实体型的各关联引用对应的关联型生成,具体地,首先生成各关联型的标识字段和属性字段,由这些字段组合成字段列表,然后这些列表依次组合成序列;

关联端字段列表序列(关联端字段列表1,关联端字段列表2,...;关联端字段列表3,关联端字段列表4,...)依据关联型的各关联端对应的实体型生成,具体地,首先生成各实体型的属性字段,由这些字段组合成字段列表,然后这些列表依次组合成序列。

当基础类型为关联型时,扩展后的SQL结构如下:

Select

基础类型字段列表,

关联端字段列表1,关联引用字段列表1,关联引用字段列表2,...,

关联端字段列表2,关联引用字段列表3,关联引用字段列表4,...,

......

From基础类型映射表

Inner Join关联端映射表1On联接条件

Inner Join关联引用映射表1On联接条件

Inner Join关联引用映射表2On联接条件

......

Inner Join关联端映射表2On联接条件

Inner Join关联引用映射表3On联接条件

Inner Join关联引用映射表4On联接条件

......

......

Where筛选条件,其中:

关联端字段列表序列(关联端字段列表1,关联端字段列表2,...)依据关联型的各关联端对应的实体型生成,具体地,首先生成各实体型的属性字段,由这些字段组合成字段列表,然后这些列表依次组合成序列;

关联引用字段列表序列(关联引用字段列表1,关联引用字段列表2,...;关联引用字段列表3,关联引用字段列表4,...)依据实体型的各关联引用对应的关联型生成,具体地,首先生成各关联型的标识字段和属性字段,由这些字段组合成字段列表,然后这些列表依次组合成序列。

如果对象图中存在环,执行图10所示的算法会产生死循环。为避免这种现象,可以将已联接过的关联引用或关联端放入寄存器,每次执行联接前先查询寄存器,如果正在联接的关联引用或关联端已存在,就不再执行并立即返回。

由于不同实体型或关联型映射表名称可能相同、多次联接同一映射表,各 Join子句中的表名可能存在重名现象,可以使用别名加以区分。推荐使用如下的表别名规则:(1)基础类型的映射表不使用别名;(2)基础类型的关联引用或关联端对应的实体型或关联型映射表的别名由表达式““_”+关联引用(关联端) 名称”生成;(3)沿关联关系逐级向下,每一级都使用该表达式生成别名,并将上一级别名作为前缀拼接接生成本级别名。

由于不同映射表可能具有同名字段,Select字句中的投影列也可能存在重名现象,同样可以使用别名加以区分。推荐使用“表别名+字段名称”作为列别名生成规则。

第六步,执行扩展后的SQL语句,得到作为查询结果的数据集。

第七步,实体化基础类型得到基础对象,并用所述数据集中的数据为基础对象的各属性赋值。

第八步,按照图9所示的算法,利用所述数据集中的数据重建对象系统。注意,如果对象图中存在环,此算法会进入死循环,为避免为种情况,可以针对每一关联引用或关联端执行校验逻辑,如果当前关联引用或关联端的值不为 NULL,则不执行后续操作并立即返回。

本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,具体的理解为:可以同时包含有A与B,可以单独存在A,也可以单独存在B,能够具备上述三种任一种情况。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

22页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种映射关联对象与关系的方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!