CN103955370B - 一种领域对象模型的持久化装置和方法 - Google Patents
一种领域对象模型的持久化装置和方法 Download PDFInfo
- Publication number
- CN103955370B CN103955370B CN201410175905.2A CN201410175905A CN103955370B CN 103955370 B CN103955370 B CN 103955370B CN 201410175905 A CN201410175905 A CN 201410175905A CN 103955370 B CN103955370 B CN 103955370B
- Authority
- CN
- China
- Prior art keywords
- attribute
- name
- extended
- domain object
- target database
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明的实施例提供一种领域对象模型的持久化装置和方法,涉及计算机领域。提供一种对领域对象模型扩展属性进行持久化的方式,简化了对领域对象模型扩展属性进行持久化时的操作,提高了可行性与实用性。其方法为:通过获取领域对象以及领域对象对应的类定义与扩展模型定义,根据扩展模型定义与类定义中的扩展属性容器确定领域对象中各扩展属性对应的列名与列值,生成扩展列信息;进一步根据目标数据库类型,确定入库策略,并结合该入库策略将扩展列信息发送至目标数据库进行存储。本发明的实施例用于对领域对象模型的扩展属性进行持久化。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种领域对象模型的持久化装置和方法。
背景技术
数据持久化,即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘),主要应用是将内存中的数据存储在数据库或磁盘文件中、XML数据文件中等等;领域对象模型,即领域对象的模型,可以被看作是一个系统的概念模型,用于定义系统中的各个实体及其之间的关系,记录了一个系统中的关键概念和词汇表,并定义了它们各自的属性。
目前,领域软件平台往往需要为相似领域的不同业务软件系统提供通用的领域能力支撑,以人员管理平台作为领域软件平台为例,可同时用于支撑图书馆职工管理系统、学校学生管理系统等不同的业务软件系统。同时,随着数据库的应用越来越广泛,各种数据持久化框架应运而生,通过将内存中的领域对象模型转换为存储模型,为领域软件平台的开发带来了极大的便利;
在现有技术应用中,领域软件平台除了为业务软件系统提供通用领域对象模型以外,同时需要提供领域对象模型扩展能力,以满足各不同业务软件系统的领域对象模型差异化需求。然而,目前主流的数据持久化框架只能针对通用领域对象模型进行持久化,而对于领域对象模型扩展属性持久化,则需要强迫领域软件平台自身进行调整来适应不同业务软件系统的差异化要求,造成平台对业务软件系统的反向依赖,且在一个领域软件平台支撑多个业务软件系统时,造成扩展属性的冲突和泛滥。这样,导致业务软件系统对领域对象模型的扩展属性进行持久化时,操作复杂且可行性、实用性低。
发明内容
本发明的实施例提供一种领域对象模型的持久化装置和方法,使得业务软件系统在对领域对象模型进行扩展时,与领域软件平台相对隔离,避免对平台进行调整,且根据数据库的类型确定相应的入库策略实现统一的封装存储,以简化对领域对象模型的扩展属性进行持久化时的操作,提高可行性与实用性。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,提供一种领域对象模型的持久化装置,所述装置包括:
获取单元,用于获取领域对象、所述领域对象对应的类定义与扩展模型定义;
所述领域对象包括至少一个扩展属性;所述类定义包括扩展属性容器,所述扩展属性容器用于承载各所述扩展属性的属性名与属性值;扩展模型定义用于指示各所述扩展属性的属性名与数据库表中列名的对应关系;
处理单元,用于根据所述获取单元获取的所述扩展模型定义与所述扩展属性容器,确定各所述扩展属性对应的列名与列值,并生成扩展列信息,所述扩展列信息包括至少一组与所述扩展属性对应的所述列名与列值;
入库单元,用于根据目标数据库类型确定入库策略,并结合所述入库策略,将所述处理单元获取的所述扩展列信息发送至所述目标数据库进行存储。
结合第一方面,在第一种可能的实现方式中,所述领域对象还包括至少一个基础属性;所述类定义包括基础属性容器,所述基础属性容器用于承载所述基础属性的属性名与属性值;
所述获取单元还用于获取所述领域对象对应的基础模型定义;所述基础模型定义用于指示各所述基础属性的属性名与数据库表中列名的对应关系;
所述处理单元还用于根据所述获取单元获取的所述基础模型定义与所述基础属性容器,确定各所述基础属性对应的列名与列值,并生成基础列信息,所述基础列信息包括至少一组与所述基础属性对应的所述列名与列值;
所述入库单元还用于结合所述入库策略,将所述处理单元获取的所述基础列信息发送至所述目标数据库进行存储。
结合第一方面,在第二种可能的实现方式中,所述处理单元具体用于:
根据所述扩展模型定义指示的各所述扩展属性的属性名与所述数据库表中列名的对应关系,确定各所述扩展属性对应的列名;
通过所述扩展属性容器获取各所述列名对应的列值,所述列值为通过所述扩展属性容器从所述领域对象中获取的与所述属性名对应的所述属性值。
结合第一方面或第一方面的第一种可能的实现方式,在第三种可能的实现方式中,所述入库单元具体用于:
获取所述目标数据库类型,并根据所述目标数据库类型确定所述入库策略;所述入库策略包括:
使用与所述目标数据库类型对应的预设构造算法,根据所述扩展列信息或所述基础列信息生成入库消息,所述入库消息为包括至少一组相互对应的列名与列值的数据库语句或指令;
确定所述目标数据库类型对应的分类,使用所述分类对应的预设数据库访问接口,将生成的所述入库信息提交至所述目标数据库进行存储。
结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所述目标数据库类型对应的分类包括:关系型、非关系型;
所述入库单元使用所述分类对应的预设数据库访问接口包括:当所述分类为关系型时,使用预设关系型数据库访问接口;或,当所述分类为非关系型时,使用预设非关系型数据库访问接口。
第二方面,提供一种领域对象模型的持久化方法,所述方法包括:
获取领域对象、所述领域对象对应的类定义与扩展模型定义;
所述领域对象包括至少一个扩展属性;所述类定义包括扩展属性容器,所述扩展属性容器用于承载各所述扩展属性的属性名与属性值;扩展模型定义用于指示各所述扩展属性的属性名与数据库表中列名的对应关系;
根据所述扩展模型定义与所述扩展属性容器,确定各所述扩展属性对应的列名与列值,并生成扩展列信息,所述扩展列信息包括至少一组与所述扩展属性对应的所述列名与列值;
根据目标数据库类型确定入库策略,并结合所述入库策略,将所述扩展列信息发送至所述目标数据库进行存储。
结合第二方面,在第一种可能的实现方式中,所述领域对象还包括至少一个基础属性;所述类定义包括基础属性容器,所述基础属性容器用于承载所述基础属性的属性名与属性值,所述方法还包括:
获取所述领域对象对应的基础模型定义;所述基础模型定义用于指示各所述基础属性的属性名与数据库表中列名的对应关系;
根据所述基础模型定义与所述基础属性容器,确定各所述基础属性对应的列名与列值,并生成基础列信息,所述基础列信息,包括至少一组与所述基础属性对应的所述列名与列值;
结合所述入库策略,将所述基础列信息发送至所述目标数据库进行存储。
结合第二方面,在第二种可能的实现方式中,所述确定各所述扩展属性对应的列名与列值,并生成扩展列信息包括:
根据所述扩展模型定义指示的各所述扩展属性的属性名与所述数据库表中列名的对应关系,确定各所述扩展属性对应的列名;
通过所述扩展属性容器获取各所述列名对应的列值,所述列值为通过所述扩展属性容器从所述领域对象中获取的与所述属性名对应的所述属性值。
结合第二方面或第二方面的第一种可能的实现方式,在第三种可能的实现方式中,所述入库策略包括:
使用与所述目标数据库类型对应的预设构造算法,根据所述扩展列信息或所述基础列信息生成入库消息,所述入库消息为包括至少一组相互对应的列名与列值的数据库语句或指令;
确定所述目标数据库类型对应的分类,使用所述分类对应的预设数据库访问接口,将生成的所述入库信息提交至所述目标数据库进行存储。
结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所述目标数据库类型对应的分类包括:关系型、非关系型;
所述使用所述分类对应的预设数据库访问接口包括:当所述分类为关系型时,使用预设关系型数据库访问接口;或,当所述分类为非关系型时,使用预设非关系型数据库访问接口。
可见,本发明的实施例提供一种领域对象模型的持久化装置和方法,通过获取领域对象以及领域对象对应的类定义与扩展模型定义,根据扩展模型定义与类定义中的扩展属性容器确定领域对象中各扩展属性对应的列名与列值,生成扩展列信息,进一步根据目标数据库类型,确定构造策略,并结合该构造策略将扩展列信息发送至目标数据库进行存储;这样,避免了在对领域对象模型进行扩展时对领域软件平台进行调整,且根据数据库的类型确定相应的构造策略实现统一的封装存储,简化了对领域对象模型的扩展属性进行持久化时的操作,提高了可行性与实用性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种领域对象模型的持久化装置的结构示意图;
图2为本发明实施例提供的一种领域对象模型的持久化方法的流程示意图;
图3为本发明实施例提供的一种领域对象模型的持久化装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的实施例提供一种领域对象模型的持久化装置00,如图1所示,该装置00包括:
获取单元001、处理单元002、入库单元003。
具体的,该获取单元001,用于获取领域对象、领域对象对应的类定义与扩展模型定义;该领域对象包括至少一个扩展属性,且对应的类定义包括扩展属性容器。
可选的,该获取单元001获取的领域对象还可以包括至少一个基础属性,且该领域对象对应的类定义还可以包括基础属性容器;该获取单元001还可以用于获取基础模型定义。
示例性的,获取单元001可以通过对象接口从业务软件系统获取领域对象;该领域对象可以为业务软件系统自身存储的,也可以为业务软件系统通过交互接口从客户系统接收外部输入获取的,此处不做限定;该获取单元001获取的领域对象可以包括一个或多个基础属性,还可以包括至少一个扩展属性。
进一步的,以学校教务管理软件系统提供的领域对象为例,领域对象可以包括基础属性如:学号(userID)、姓名(userName)、年龄(userAge)等,以及其各自对应的属性值:学号(userID)为“10001”、姓名(userName)为“Joyh”、年龄(userAge)为“25”;还可以包括扩展属性如:性别(userSex)、出生日期(userDate)等,以及其各自对应的属性值:性别(userSex)为“男”、出生日期(userDate)为“1985年1月1日”。
示例性的,获取单元001获取的类定义可以包括一个或多个基础属性容器,该基础属性容器用于承载上述领域对象各基础属性的属性名与属性值,还可以包括扩展属性容器,该扩展属性容器用于承载上述领域对象各扩展属性的属性名与属性值;且获取单元001可以通过自身的类管理器从领域软件平台加载与领域对象相对应的上述类定义;该类定义可以为领域软件平台提供的,且对于不同类型的领域对象,存在不同的类定义与之相对应。
值得一提的,上述基础属性容器为上述类定义中对领域对象中一个或多个既定基础属性的描述,可以为指定的一个或多个变量名、内存空间;上述扩展属性容器为类定义中对未定扩展属性预留的描述,可以为预设的接口。且上述基础属性容器与扩展属性容器的具体的实现方式此处不做限定。
进一步的,以与上述学校教务管理软件系统提供的领域对象相对于的类定义为例,示意如下:
其中,“public class User”表明该类定义的类名为User,“private intuserID”、“private String userName”、“private int userAge”为对三个基础属性容器的定义描述,变量userID、userName、userAge依次用于承载基础属性:学号(userID)、姓名(userName)与年龄(userAge),变量名与属性名对应,变量值即为属性名对应的属性值。“private Map<String,String>extProperties”为对扩展属性容器的定义描述,用于承载扩展属性:性别(userSex)、出生日期(userDate);且“Map<String,String>”在承载扩展属性时对应的格式可以为<属性名,属性值>,即记录的第一个字符串为属性名,第二个字符串为属性值。
进一步的,装置00可以根据类定义中定义的基础属性容器与扩展属性容器,从领域对象中获取各基础属性的属性名与属性值,各扩展属性的属性名与属性值。
示例性的,获取单元001获取的基础模型定义用于指示领域对象各基础属性的属性名与数据库表中列名的对应关系,即对领域对象各基础属性的持久化映射规则;获取的扩展模型定义用于指示领域对象各扩展属性的属性名与数据库表中列名的对应关系,即对领域对象各扩展属性的持久化映射规则;
获取单元001可以通过自身的模型管理器从领域软件平台加载与领域对象对应的上述基础模型定义,还可以从业务软件系统获取领域对象对应的扩展模型定义;该扩展模型定义可以为业务软件系统自身缺省设定的模型定义,也可以为业务软件系统通过交互接口从外部接收的模型定义,此处不做限定。
进一步的,以与上述学校教务管理软件系统提供的领域对象相对于的模型定义为例,基础模型定义示意如下:
其中,“<property name="userID">”、“<property name="userName">”、“<property name="userAge">”表明领域对象各基础属性的属性名;“<column>userID</column>”、“<column>userName</column>”、“<column>userAge</column>”表明与上述各属性名依次对应的数据库表中列名。
扩展模型定义示意如下:
其中,“<extProperty name="userSex">”、“<extProperty name="userDate">”表明领域对象各扩展属性的属性名;“<column>userSex</column>”、“<column>userDate</column>”表明与上述各属性名依次对应的数据库表中列名。
具体的,该处理单元002,用于根据获取单元001获取的扩展模型定义与扩展属性容器,确定各扩展属性对应的列名与列值,并生成扩展列信息;
其中,扩展列信息包括至少一组与扩展属性对应的列名与列值。
示例性的,在获取单元001获取扩展模型定义后,处理单元002根据扩展模型定义指示的各扩展属性的属性名与数据库表中列名的对应关系,确定各扩展属性对应的列名;
以上述示意的扩展模型定义为例,可确定:领域对象扩展属性中的属性名性别(userSex)与数据库表中列名userSex对应、属性名出生日期(userDate)与列名userDate对应;
进一步的,处理单元002通过获取单元001获取的扩展属性容器,从领域对象中获取各列名对应的列值;其中,该列值即为扩展属性容器中加载获取的上述领域对象扩展属性中与该属性名对应的属性值。
以上述示意的领域对象、扩展属性容器与扩展模型定义为例,扩展属性中属性名性别(userSex)对应的属性值为“男”,属性名出生日期(userDate)对应的属性值为“1985年1月1日”,则数据库表中列名userSex对应的列值为“男”,列名userDate对应的列值为“1985年1月1日”。
再进一步的,处理单元002将各组对应的列名与列值进行绑定,生成扩展列信息,该扩展列信息包括至少一组扩展属性对应的列名与列值;以上述示意的领域对象为例,扩展属性对应获取的扩展列信息可以为:“userSex:‘男’,userDate:‘1985年1月1日’”;且上述列举扩展列信息的形式仅为示例性的,包括但不限于此。
可选的,该处理单元002还用于根据获取单元001获取的基础模型定义与基础属性容器,确定各基础属性对应的列名与列值,并生成基础列信息;
其中,基础列信息包括至少一组与基础属性对应的列名与列值。
示例性的,在获取单元001获取基础模型定义后,处理单元002根据基础模型定义指示的各基础属性的属性名与数据库表中列名的对应关系,确定各基础属性对应的列名;
以上述示意的基础模型定义为例,可确定:领域对象基础属性中的属性名学号(userID)与数据库表中列名userID对应、属性名姓名(userName)与列名userName对应、属性名年龄(userAge)与列名userAge对应;
进一步的,处理单元002通过获取单元001获取的基础属性容器,从领域对象中获取各列名对应的列值;其中,该列值即为基础属性容器中加载获取的上述领域对象基础属性中与该属性名对应的属性值。
以上述示意的领域对象、基础属性容器与基础模型定义为例,基础属性中属性名学号(userID)对应的属性值为“10001”,属性名姓名(userName)对应的属性值为“Joyh”,属性名年龄(userAge)对应的属性值为“25”,则数据库表中列名userID对应的列值为“10001”,列名userName对应的列值为“Joyh”,列名userAge对应的列值为“25”。
再进一步的,处理单元002将各组对应的列名与列值进行绑定,生成基础列信息,该基础列信息包括至少一组基础属性对应的列名与列值;以上述示意的领域对象为例,基础属性对应获取的基础列信息可以为:“userID:‘10001’,userName:‘Joyh’,userAge:‘25’”;且上述列举基础列信息的形式仅为示例性的,包括但不限于此。
值得一提的,当领域对象同时包括至少一个基础属性与至少一个扩展属性时,处理单元002在获取单元001获取扩展模型定义与基础模型定义后,进行合并获取领域对象对应的完整模型定义,进一步可以根据完整模型定义指示的各领域对象属性的属性名与数据库表中列名的对应关系,确定各属性对应的列名,再在获取列名对应列值后,将列名与列值进行绑定,获取完整的插入列信息,该完整的插入列信息包括领域对象所有基础属性及扩展属性对应的列名与列值。以上述示意的领域对象为例,完整的插入列信息可以为:“userID:‘10001’,userName:‘Joyh’,userAge:‘25’,userSex:‘男’,userDate:‘1985年1月1日’”;且上述列举完整插入列信息的形式仅为示例性的,包括但不限于此。
具体的,入库单元003,用于根据目标数据库类型确定入库策略,并结合入库策略,将处理单元002获取的扩展列信息发送至目标数据库进行存储。
可选的,入库单元003还用于结合该入库策略,将处理单元002获取的基础列信息发送至目标数据库进行存储。
其中,入库策略包括:使用与目标数据库类型对应的预设构造算法,根据扩展列信息或基础列信息生成入库消息,入库消息为包括至少一组相互对应的列名与列值的数据库语句或指令;
进一步,确定目标数据库类型对应的分类,使用分类对应的预设数据库访问接口,将生成的入库信息提交至目标数据库进行存储。
示例性的,在处理单元002获取扩展列信息、基础列信息、完整的插入列信息中的任一种之后,获取目标数据库类型,并根据目标数据库类型确定入库策略。
上述目标数据库类型包括:Oracle数据库、MySQL数据库、Cassandra数据库、HBase数据库、MongeDB等;目标数据库类型对应的分类包括:关系型、非关系型。其中,Oracle数据库、MySQL数据库等对应的分类为关系型;Cassandra数据库、HBase数据库、MongeDB等对应的分类为非关系型。且上述列举的目标数据库类型仅为示例性的,包括但不限于此。
上述预设构造算法使用的语言或命令包括:结构化查询语言SQL、键值Key-Value命令。上述使用与目标数据库类型对应的预设构造算法包括:Oracle数据库、MySQL数据库等对应使用SQL语言的构造算法;Cassandra数据库、HBase数据库、MongeDB等对应使用Key-Value命令的构造算法。需要注意的,根据数据库类型的不同,使用不同的预设构造算法使用同类型的语言或命令构造得到的语句或命令也不同,且与目标数据库类型分别对应。上述列举的预设构造算法使用的语言或命令、目标数据库类型对应的预设构造算法都为示例性的,包括但不限于此。
示例性的,入库单元003使用分类对应的预设数据库访问接口包括:当分类为关系型时,使用预设关系型数据库访问接口;或,当分类为非关系型时,使用预设非关系型数据库访问接口。
其中,预设关系型数据库访问接口包括:JAVA数据库连接(Java Data BaseConnectivity,JDBC)API、开放数据库互连(Open Database Connectivity,ODBC)API等;预设非关系型数据库访问接口包括:Key-Value等。且上述列举的数据库访问接口仅为示例性的,包括但不限于此。
进一步的,当入库单元003将入库消息提交至目标数据库后,目标数据库接收并根据入库消息对领域对象各属性对应的列名与列值进行存储。
假设目标数据库类型对应的分类为关系型(如Oracle数据库),则入库单元003在确定入库策略后,结合处理单元002获取的领域对象各属性对应的各列信息构造入库消息,即拼装与各属性对应的SQL语句;且由于关系型数据库中的表无法根据各领域对象扩展属性的差异动态引入新的列来进行存储,故可以采用横表的格式保存基础属性(如表1所示),纵表的格式保存扩展属性(如表2所示)。
表1
userID | userName | userAge |
10001 | Joyh | 25 |
表2
userID | Key | Value |
10001 | userSex | 男 |
10001 | userDate | 1985年1月1日 |
假设目标数据库类型对应的分类为非关系型(如Cassandra数据库),则入库单元003在确定入库策略后,结合处理单元002获取的领域对象各属性对应的各列信息构造入库消息,即构造与各属性对应的Key-Value命令;且由于某些非关系型数据库(如Cassandra数据库、HBase数据库等)中的表能够根据各领域对象扩展属性的差异动态引入新的列来进行存储,故对基础属性与扩展属性可同等处理。
本发明的实施例提供一种领域对象模型的持久化装置,通过获取领域对象以及领域对象对应的类定义与扩展模型定义,根据扩展模型定义与类定义中的扩展属性容器确定领域对象中各扩展属性对应的列名与列值,生成扩展列信息,进一步根据目标数据库类型,确定入库策略,并结合该入库策略将扩展列信息发送至目标数据库进行存储;这样,避免了在对领域对象模型进行扩展时对领域软件平台进行调整,且根据数据库的类型确定相应的入库策略实现统一的封装存储,简化了对领域对象模型的扩展属性进行持久化时的操作,提高了可行性与实用性。
本发明的实施例还提供一种领域对象模型的持久化方法,如图2所示,该方法包括:
S101、获取领域对象、领域对象对应的类定义与扩展模型定义。
其中,领域对象包括至少一个扩展属性;类定义包括扩展属性容器,该扩展属性容器用于承载各扩展属性的属性名与属性值;扩展模型定义用于指示各扩展属性的属性名与数据库表中列名的对应关系。
可选的,该领域对象还可以包括至少一个基础属性,且该领域对象对应的类定义还可以包括基础属性容器;该方法还可以包括获取基础模型定义。
示例性的,可通过对象接口从业务软件系统获取领域对象;该领域对象可以为业务软件系统自身存储的,也可以为业务软件系统通过交互接口从客户系统接收外部输入获取的,此处不做限定;获取的领域对象可以包括一个或多个基础属性,还可以包括至少一个扩展属性。
进一步的,以学校教务管理软件系统提供的领域对象为例,领域对象可以包括基础属性如:学号(userID)、姓名(userName)、年龄(userAge)等,以及其各自对应的属性值:学号(userID)为“10001”、姓名(userName)为“Joyh”、年龄(userAge)为“25”;还可以包括扩展属性如:性别(userSex)、出生日期(userDate)等,以及其各自对应的属性值:性别(userSex)为“男”、出生日期(userDate)为“1985年1月1日”。
示例性的,上述类定义可以包括一个或多个基础属性容器,该基础属性容器用于承载各基础属性的属性名与属性值,还可以包括扩展属性容器,该扩展属性容器用于承载各扩展属性的属性名与属性值;且可通过类管理器从领域软件平台加载与领域对象相对应的上述类定义;该类定义可以为领域软件平台提供的,且对于不同类型的领域对象,存在不同的类定义与之相对应。
值得一提的,上述基础属性容器为上述类定义中对领域对象中一个或多个既定基础属性的描述,可以为指定的一个或多个变量名、内存空间;上述扩展属性容器为类定义中对未定扩展属性预留的描述,可以为预设的接口。且上述基础属性容器与扩展属性容器的具体的实现方式此处不做限定。
进一步的,以与上述学校教务管理软件系统提供的领域对象相对于的类定义为例,示意如下:
其中,“public class User”表明该类定义的类名为User,“privateint userID”、“private String userName”、“private int userAge”为对三个基础属性容器的定义描述,变量userID、userName、userAge依次用于承载基础属性:学号(userID)、姓名(userName)与年龄(userAge),变量名与属性名对应,变量值即为属性名对应的属性值。“private Map<String,String>extProperties”为对扩展属性容器的定义描述,用于承载扩展属性:性别(userSex)、出生日期(userDate);且“Map<String,String>”在承载扩展属性时对应的格式可以为<属性名,属性值>,即记录的第一个字符串为属性名,第二个字符串为属性值。
进一步的,可根据类定义中定义的基础属性容器与扩展属性容器,从领域对象中获取各基础属性的属性名与属性值,各扩展属性的属性名与属性值。
示例性的,获取的基础模型定义用于指示领域对象各基础属性的属性名与数据库表中列名的对应关系,即对领域对象各基础属性的持久化映射规则;获取的扩展模型定义用于指示领域对象各扩展属性的属性名与数据库表中列名的对应关系,即对领域对象各扩展属性的持久化映射规则;
可通过模型管理器从领域软件平台加载与领域对象对应的上述基础模型定义,还可以从业务软件系统获取领域对象对应的扩展模型定义;该扩展模型定义可以为业务软件系统自身缺省设定的模型定义,也可以为业务软件系统通过交互接口从外部接收的模型定义,此处不做限定。
进一步的,以与上述学校教务管理软件系统提供的领域对象相对于的模型定义为例,基础模型定义示意如下:
其中,“<property name="userID">”、“<property name="userName">”、“<property name="userAge">”表明领域对象各基础属性的属性名;“<column>userID</column>”、“<column>userName</column>”、“<column>userAge</column>”表明与上述各属性名依次对应的数据库表中列名。
扩展模型定义示意如下:
其中,“<extProperty name="userSex">”、“<extProperty name="userDate">”表明领域对象各扩展属性的属性名;“<column>userSex</column>”、“<column>userDate</column>”表明与上述各属性名依次对应的数据库表中列名。
S102、根据扩展模型定义与扩展属性容器,确定各扩展属性对应的列名与列值,并生成扩展列信息。
其中,扩展列信息包括至少一组与扩展属性对应的列名与列值。
示例性的,在获取扩展模型定义后,根据扩展模型定义指示的各扩展属性的属性名与数据库表中列名的对应关系,确定各扩展属性对应的列名;
以上述示意的扩展模型定义为例,可确定:领域对象扩展属性中的属性名性别(userSex)与数据库表中列名userSex对应、属性名出生日期(userDate)与列名userDate对应;
进一步的,通过扩展属性容器,从领域对象中获取各列名对应的列值;其中,该列值即为扩展属性容器中加载获取的上述领域对象扩展属性中与该属性名对应的属性值。
以上述示意的领域对象、扩展属性容器与扩展模型定义为例,扩展属性中属性名性别(userSex)对应的属性值为“男”,属性名出生日期(userDate)对应的属性值为“1985年1月1日”,则数据库表中列名userSex对应的列值为“男”,列名userDate对应的列值为“1985年1月1日”。
再进一步的,将各组对应的列名与列值进行绑定,生成扩展列信息,该扩展列信息包括至少一组扩展属性对应的列名与列值;以上述示意的领域对象为例,扩展属性对应获取的扩展列信息可以为:“userSex:‘男’,userDate:‘1985年1月1日’”;且上述列举扩展列信息的形式仅为示例性的,包括但不限于此。
可选的,该方法包括:根据获取的基础模型定义与基础属性容器,确定各基础属性对应的列名与列值,并生成基础列信息;
其中,基础列信息包括至少一组与基础属性对应的列名与列值。
示例性的,在获取基础模型定义后,根据基础模型定义指示的各基础属性的属性名与数据库表中列名的对应关系,确定各基础属性对应的列名;
以上述示意的基础模型定义为例,可确定:领域对象基础属性中的属性名学号(userID)与数据库表中列名userID对应、属性名姓名(userName)与列名userName对应、属性名年龄(userAge)与列名userAge对应;
进一步的,通过基础属性容器,从领域对象中获取各列名对应的列值;其中,该列值即为基础属性容器中加载获取的上述领域对象基础属性中与该属性名对应的属性值。
以上述示意的领域对象、基础属性容器与基础模型定义为例,基础属性中属性名学号(userID)对应的属性值为“10001”,属性名姓名(userName)对应的属性值为“Joyh”,属性名年龄(userAge)对应的属性值为“25”,则数据库表中列名userID对应的列值为“10001”,列名userName对应的列值为“Joyh”,列名userAge对应的列值为“25”。
再进一步的,将各组对应的列名与列值进行绑定,生成基础列信息,该基础列信息包括至少一组基础属性对应的列名与列值;以上述示意的领域对象为例,基础属性对应获取的基础列信息可以为:“userID:‘10001’,userName:‘Joyh’,userAge:‘25’”;且上述列举基础列信息的形式仅为示例性的,包括但不限于此。
值得一提的,当领域对象同时包括至少一个基础属性与至少一个扩展属性时,在获取扩展模型定义与基础模型定义后,进行合并获取领域对象对应的完整模型定义,进一步可以根据完整模型定义指示的各领域对象属性的属性名与数据库表中列名的对应关系,确定各属性对应的列名,再在获取列名对应列值后,将列名与列值进行绑定,获取完整的插入列信息,该完整的插入列信息包括领域对象所有基础属性及扩展属性对应的列名与列值。以上述示意的领域对象为例,完整的插入列信息可以为:“userID:‘10001’,userName:‘Joyh’,userAge:‘25’,userSex:‘男’,userDate:‘1985年1月1日’”;且上述列举完整插入列信息的形式仅为示例性的,包括但不限于此。
S103、根据目标数据库类型确定入库策略,并结合入库策略,将扩展列信息发送至目标数据库进行存储。
可选的,该方法还包括结合该入库策略,将获取的基础列信息发送至目标数据库进行存储。
其中,入库策略包括:使用与目标数据库类型对应的预设构造算法,根据扩展列信息或基础列信息生成入库消息,入库消息为包括至少一组相互对应的列名与列值的数据库语句或指令;
进一步,确定目标数据库类型对应的分类,使用分类对应的预设数据库访问接口,将生成的入库信息提交至目标数据库进行存储。
示例性的,在获取扩展列信息、基础列信息、完整的插入列信息中的任一种之后,获取目标数据库类型,并根据目标数据库类型确定入库策略。
上述目标数据库类型包括:Oracle数据库、MySQL数据库、Cassandra数据库、HBase数据库、MongeDB等;目标数据库类型对应的分类包括:关系型、非关系型。其中,Oracle数据库、MySQL数据库等对应的分类为关系型;Cassandra数据库、HBase数据库、MongeDB等对应的分类为非关系型。且上述列举的目标数据库类型仅为示例性的,包括但不限于此。
上述预设构造算法使用的语言或命令包括:结构化查询语言SQL、键值Key-Value命令。上述使用与目标数据库类型对应的预设构造算法包括:Oracle数据库、MySQL数据库等对应使用SQL语言的构造算法;Cassandra数据库、HBase数据库、MongeDB等对应使用Key-Value命令的构造算法。需要注意的,根据数据库类型的不同,使用不同的预设构造算法使用同类型的语言或命令构造得到的语句或命令也不同,且与目标数据库类型分别对应。上述列举的预设构造算法使用的语言或命令、目标数据库类型对应的预设构造算法都为示例性的,包括但不限于此。
示例性的,使用分类对应的预设数据库访问接口包括:当分类为关系型时,使用预设关系型数据库访问接口;或,当分类为非关系型时,使用预设非关系型数据库访问接口。
其中,预设关系型数据库访问接口包括:JAVA数据库连接(Java Data BaseConnectivity,JDBC)API、开放数据库互连(Open Database Connectivity,ODBC)API等;预设非关系型数据库访问接口包括:Key-Value等。且上述列举的数据库访问接口仅为示例性的,包括但不限于此。
进一步的,在将入库消息提交至目标数据库后,目标数据库接收并根据入库消息对领域对象各属性对应的列名与列值进行存储。
假设目标数据库类型对应的分类为关系型(如Oracle数据库),则在确定入库策略后,结合获取的领域对象各属性对应的各列信息构造入库消息,即拼装与各属性对应的SQL语句;且由于关系型数据库中的表无法根据各领域对象扩展属性的差异动态引入新的列来进行存储,故可以采用横表的格式保存基础属性(如表3所示),纵表的格式保存扩展属性(如表4所示)。
表3
userID | userName | userAge |
10001 | Joyh | 25 |
表4
userID | Key | value |
10001 | userSex | 男 |
10001 | userDate | 1985年1月1日 |
假设目标数据库类型对应的分类为非关系型(如Cassandra数据库),则在确定入库策略后,结合获取的领域对象各属性对应的各列信息构造入库消息,即构造与各属性对应的Key-Value命令;且由于某些非关系型数据库(如Cassandra数据库、HBase数据库等)中的表能够根据各领域对象扩展属性的差异动态引入新的列来进行存储,故对基础属性与扩展属性可同等处理。
本发明的实施例提供一种领域对象模型的持久化方法,通过获取领域对象以及领域对象对应的类定义与扩展模型定义,根据扩展模型定义与类定义中的扩展属性容器确定领域对象中各扩展属性对应的列名与列值,生成扩展列信息,进一步根据目标数据库类型,确定入库策略,并结合该入库策略将扩展列信息发送至目标数据库进行存储;这样,避免了在对领域对象模型进行扩展时对领域软件平台进行调整,且根据数据库的类型确定相应的入库策略实现统一的封装存储,简化了对领域对象模型的扩展属性进行持久化时的操作,提高了可行性与实用性。
本发明的实施例提供一种领域对象模型的持久化装置01,如图3所示,该装置01包括:
总线011、以及连接到总线011的处理器012、存储器013和接口014,其中接口014用于与外部设备进行通信;
该存储器013用于存储指令,该处理器012用于执行该指令用于获取领域对象、领域对象对应的类定义与扩展模型定义。
其中,领域对象包括至少一个扩展属性;类定义包括扩展属性容器,该扩展属性容器用于承载各扩展属性的属性名与属性值;扩展模型定义用于指示各扩展属性的属性名与数据库表中列名的对应关系。
该处理器012执行该指令还用于根据获取的扩展模型定义与扩展属性容器,确定各扩展属性对应的列名与列值,并生成扩展列信息。
其中,扩展列信息包括至少一组与扩展属性对应的列名与列值。
该处理器012执行该指令还用于根据目标数据库类型确定入库策略,并结合入库策略,将获取的扩展列信息发送至目标数据库进行存储。
在本发明实施例中,可选的,领域对象还包括至少一个基础属性;类定义包括基础属性容器,该基础属性容器用于承载基础属性的属性名与属性值;该处理器012执行该指令可以具体用于:
获取领域对象对应的基础模型定义;基础模型定义用于指示各基础属性的属性名与数据库表中列名的对应关系;
根据获取的基础模型定义与基础属性容器,确定各基础属性对应的列名与列值,并生成基础列信息,基础列信息包括至少一组与基础属性对应的列名与列值;
结合入库策略,将获取的基础列信息发送至目标数据库进行存储。
在本发明实施例中,可选的,该处理器012执行该指令可以具体用于:
根据扩展模型定义指示的各扩展属性的属性名与数据库表中列名的对应关系,确定各扩展属性对应的列名;
通过扩展属性容器获取各列名对应的列值,列值为通过扩展属性容器从领域对象中获取的与属性名对应的属性值。
在本发明实施例中,可选的,该处理器012执行该指令可以具体用于:
获取目标数据库类型,并根据目标数据库类型确定入库策略;入库策略包括:
使用与目标数据库类型对应的预设构造算法,根据扩展列信息或基础列信息生成入库消息,入库消息为包括至少一组相互对应的列名与列值的数据库语句或指令;
确定目标数据库类型对应的分类,使用分类对应的预设数据库访问接口,将生成的入库信息提交至目标数据库进行存储。
在本发明实施例中,可选的,目标数据库类型对应的分类包括:关系型、非关系型;
该处理器012执行该指令使用分类对应的预设数据库访问接口包括:当分类为关系型时,使用预设关系型数据库访问接口;或,当分类为非关系型时,使用预设非关系型数据库访问接口。
本发明的实施例提供一种领域对象模型的持久化装置,通过获取领域对象以及领域对象对应的类定义与扩展模型定义,根据扩展模型定义与类定义中的扩展属性容器确定领域对象中各扩展属性对应的列名与列值,生成扩展列信息,进一步根据目标数据库类型,确定入库策略,并结合该入库策略将扩展列信息发送至目标数据库进行存储;这样,避免了在对领域对象模型进行扩展时对领域软件平台进行调整,且根据数据库的类型确定相应的入库策略实现统一的封装存储,简化了对领域对象模型的扩展属性进行持久化时的操作,提高了可行性与实用性。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (12)
1.一种领域对象模型的持久化装置,其特征在于,所述装置包括:
获取单元,用于获取领域对象、所述领域对象对应的类定义与扩展模型定义;
所述领域对象包括至少一个扩展属性;所述类定义包括扩展属性容器,所述扩展属性容器用于承载各所述扩展属性的属性名与属性值;扩展模型定义用于指示各所述扩展属性的属性名与数据库表中列名的对应关系;
处理单元,用于根据所述获取单元获取的所述扩展模型定义与所述扩展属性容器,确定各所述扩展属性对应的列名与列值,并生成扩展列信息,所述扩展列信息包括至少一组与所述扩展属性对应的所述列名与列值;
入库单元,用于根据目标数据库类型确定入库策略,并结合所述入库策略,将所述处理单元获取的所述扩展列信息发送至所述目标数据库进行存储。
2.根据权利要求1所述的装置,其特征在于,所述领域对象还包括至少一个基础属性;所述类定义包括基础属性容器,所述基础属性容器用于承载所述基础属性的属性名与属性值;
所述获取单元还用于获取所述领域对象对应的基础模型定义;所述基础模型定义用于指示各所述基础属性的属性名与数据库表中列名的对应关系;
所述处理单元还用于根据所述获取单元获取的所述基础模型定义与所述基础属性容器,确定各所述基础属性对应的列名与列值,并生成基础列信息,所述基础列信息包括至少一组与所述基础属性对应的所述列名与列值;
所述入库单元还用于结合所述入库策略,将所述处理单元获取的所述基础列信息发送至所述目标数据库进行存储。
3.根据权利要求1所述的装置,其特征在于,所述处理单元具体用于:
根据所述扩展模型定义指示的各所述扩展属性的属性名与所述数据库表中列名的对应关系,确定各所述扩展属性对应的列名;
通过所述扩展属性容器获取各所述列名对应的列值,所述列值为通过所述扩展属性容器从所述领域对象中获取的与所述属性名对应的所述属性值。
4.根据权利要求1所述的装置,其特征在于,所述入库单元具体用于:
获取所述目标数据库类型,并根据所述目标数据库类型确定所述入库策略;所述入库策略包括:
使用与所述目标数据库类型对应的预设构造算法,根据所述扩展列信息生成入库消息,所述入库消息为包括至少一组相互对应的列名与列值的数据库语句或指令;
确定所述目标数据库类型对应的分类,使用所述分类对应的预设数据库访问接口,将生成的所述入库消息提交至所述目标数据库进行存储。
5.根据权利要求2所述的装置,其特征在于,所述入库单元具体用于:
获取所述目标数据库类型,并根据所述目标数据库类型确定所述入库策略;所述入库策略包括:
使用与所述目标数据库类型对应的预设构造算法,根据所述基础列信息生成入库消息,所述入库消息为包括至少一组相互对应的列名与列值的数据库语句或指令;
确定所述目标数据库类型对应的分类,使用所述分类对应的预设数据库访问接口,将生成的所述入库消息提交至所述目标数据库进行存储。
6.根据权利要求4或5所述的装置,其特征在于,
所述目标数据库类型对应的分类包括:关系型、非关系型;
所述入库单元使用所述分类对应的预设数据库访问接口包括:当所述分类为关系型时,使用预设关系型数据库访问接口;或,当所述分类为非关系型时,使用预设非关系型数据库访问接口。
7.一种领域对象模型的持久化方法,其特征在于,所述方法包括:
获取领域对象、所述领域对象对应的类定义与扩展模型定义;
所述领域对象包括至少一个扩展属性;所述类定义包括扩展属性容器,所述扩展属性容器用于承载各所述扩展属性的属性名与属性值;扩展模型定义用于指示各所述扩展属性的属性名与数据库表中列名的对应关系;
根据所述扩展模型定义与所述扩展属性容器,确定各所述扩展属性对应的列名与列值,并生成扩展列信息,所述扩展列信息包括至少一组与所述扩展属性对应的所述列名与列值;
根据目标数据库类型确定入库策略,并结合所述入库策略,将所述扩展列信息发送至所述目标数据库进行存储。
8.根据权利要求7所述的方法,其特征在于,所述领域对象还包括至少一个基础属性;所述类定义包括基础属性容器,所述基础属性容器用于承载所述基础属性的属性名与属性值,所述方法还包括:
获取所述领域对象对应的基础模型定义;所述基础模型定义用于指示各所述基础属性的属性名与数据库表中列名的对应关系;
根据所述基础模型定义与所述基础属性容器,确定各所述基础属性对应的列名与列值,并生成基础列信息,所述基础列信息,包括至少一组与所述基础属性对应的所述列名与列值;
结合所述入库策略,将所述基础列信息发送至所述目标数据库进行存储。
9.根据权利要求7所述的方法,其特征在于,所述确定各所述扩展属性对应的列名与列值,并生成扩展列信息包括:
根据所述扩展模型定义指示的各所述扩展属性的属性名与所述数据库表中列名的对应关系,确定各所述扩展属性对应的列名;
通过所述扩展属性容器获取各所述列名对应的列值,所述列值为通过所述扩展属性容器从所述领域对象中获取的与所述属性名对应的所述属性值。
10.根据权利要求7所述的方法,其特征在于,所述入库策略包括:
使用与所述目标数据库类型对应的预设构造算法,根据所述扩展列信息生成入库消息,所述入库消息为包括至少一组相互对应的列名与列值的数据库语句或指令;
确定所述目标数据库类型对应的分类,使用所述分类对应的预设数据库访问接口,将生成的所述入库消息提交至所述目标数据库进行存储。
11.根据权利要求8所述的方法,其特征在于,所述入库策略包括:
使用与所述目标数据库类型对应的预设构造算法,根据所述基础列信息生成入库消息,所述入库消息为包括至少一组相互对应的列名与列值的数据库语句或指令;
确定所述目标数据库类型对应的分类,使用所述分类对应的预设数据库访问接口,将生成的所述入库消息提交至所述目标数据库进行存储。
12.根据权利要求10或11所述的方法,其特征在于,
所述目标数据库类型对应的分类包括:关系型、非关系型;
所述使用所述分类对应的预设数据库访问接口包括:当所述分类为关系型时,使用预设关系型数据库访问接口;或,当所述分类为非关系型时,使用预设非关系型数据库访问接口。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410175905.2A CN103955370B (zh) | 2014-04-28 | 2014-04-28 | 一种领域对象模型的持久化装置和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410175905.2A CN103955370B (zh) | 2014-04-28 | 2014-04-28 | 一种领域对象模型的持久化装置和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103955370A CN103955370A (zh) | 2014-07-30 |
CN103955370B true CN103955370B (zh) | 2017-07-07 |
Family
ID=51332646
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410175905.2A Active CN103955370B (zh) | 2014-04-28 | 2014-04-28 | 一种领域对象模型的持久化装置和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103955370B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105787056A (zh) * | 2016-02-29 | 2016-07-20 | 浪潮通用软件有限公司 | 一种基于自定义计算模型的计算方法 |
CN106294665A (zh) * | 2016-08-05 | 2017-01-04 | 浪潮软件股份有限公司 | 一种学籍数据存储的方法和装置 |
CN108776674B (zh) * | 2018-05-23 | 2021-03-12 | 中国农业银行股份有限公司 | 一种电子凭证存储方法、装置及服务器 |
CN108984504A (zh) * | 2018-07-12 | 2018-12-11 | 广东电网有限责任公司 | 一种模型参数存储方法、装置及设备 |
CN109657413B (zh) * | 2019-01-23 | 2023-05-23 | 中国人民解放军国防科技大学 | 仿真组件模型入库方法、模型库、计算机设备和存储介质 |
CN113297197A (zh) * | 2020-02-21 | 2021-08-24 | 北京沃东天骏信息技术有限公司 | 标签管理系统、标签操作方法以及数据表操作方法和装置 |
CN112434069A (zh) * | 2020-12-01 | 2021-03-02 | 天津市鑫联兴科技有限公司 | 一种多源异构数据库访问适配方法及适配器 |
CN113656433B (zh) * | 2021-08-16 | 2023-09-05 | 北京京东振世信息技术有限公司 | 实体对象扩展方法、装置、电子设备和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101339559A (zh) * | 2008-07-18 | 2009-01-07 | 北京航空航天大学 | 一种数据持久化实现方法 |
CN101980213A (zh) * | 2010-11-23 | 2011-02-23 | 中国科学院软件研究所 | 一种基于j2ee的数据持久化方法及系统 |
CN102054034A (zh) * | 2010-12-27 | 2011-05-11 | 华中科技大学 | 企业信息系统的业务基础数据持久化实现方法 |
CN102819609A (zh) * | 2012-08-23 | 2012-12-12 | 国电南京自动化股份有限公司 | 一种持久化数据模型建模方法 |
-
2014
- 2014-04-28 CN CN201410175905.2A patent/CN103955370B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101339559A (zh) * | 2008-07-18 | 2009-01-07 | 北京航空航天大学 | 一种数据持久化实现方法 |
CN101980213A (zh) * | 2010-11-23 | 2011-02-23 | 中国科学院软件研究所 | 一种基于j2ee的数据持久化方法及系统 |
CN102054034A (zh) * | 2010-12-27 | 2011-05-11 | 华中科技大学 | 企业信息系统的业务基础数据持久化实现方法 |
CN102819609A (zh) * | 2012-08-23 | 2012-12-12 | 国电南京自动化股份有限公司 | 一种持久化数据模型建模方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103955370A (zh) | 2014-07-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103955370B (zh) | 一种领域对象模型的持久化装置和方法 | |
US20220067117A1 (en) | System and method for linking data records for parcels | |
US8375060B2 (en) | Managing parameters in filter expressions | |
CN110765272B (zh) | 基于知识图谱的签约方法、装置、计算机设备及计算机存储介质 | |
US20120174194A1 (en) | Role setting apparatus, and role setting method | |
CN103971555A (zh) | 多层次自动化评估训练综合服务方法及系统 | |
CN101216835B (zh) | 一种数据文档转换方法及装置 | |
CN103390015A (zh) | 基于统一索引的海量数据联合存储方法及检索方法 | |
CN104021210B (zh) | 以GeoJSON格式半结构化方式存储地理数据的MongoDB集群的地理数据读写方法 | |
CN103927385A (zh) | 数据模型的统一方法及装置 | |
CN112463986A (zh) | 信息存储的方法及装置 | |
CN106960020A (zh) | 一种创建索引表的方法及设备 | |
CN107066593A (zh) | 一种镇级边界坐标数据与图表结合展示的方法及系统 | |
CN105809594A (zh) | 一种灵活的知识点体系构建方法和系统 | |
US10726509B1 (en) | Data mining data records to determine networks and boundaries | |
Palmer | Cartographic encounters at the Bureau of Indian Affairs Geographic Information System center of calculation | |
CN106952046A (zh) | 一种智能排课方法及系统 | |
Barry et al. | Talking titler: Evolutionary and self-adaptive land tenure information system Development | |
TWM607736U (zh) | 學區查詢系統 | |
CN112015982A (zh) | 定制化新闻生成方法、装置、设备及存储介质 | |
CN111291132A (zh) | 面向智慧旅游的文物领域本体构建及分析方法 | |
Mwakipesile et al. | Transferring cultural geo-history datasets of artifacts using GIS geodatabase for archiving in Dodoma Capital City, Tanzania | |
Kruger et al. | Curriculum information models in health professions education in Australia: an innovative approach to efficient curriculum design, development, and maintenance | |
Newman | Nicholas S. Paliewicz and Marouf Hasian Jr. The Securitization of Memorial Space: Rhetoric and Public Memory. | |
Manigbas | Post-Disaster Population Sustainment in Cherokee County, Georgia |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20200212 Address after: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee after: HUAWEI TECHNOLOGIES Co.,Ltd. Address before: 210012 HUAWEI Nanjing base, 101 software Avenue, Yuhuatai District, Jiangsu, Nanjing Patentee before: Huawei Technologies Co.,Ltd. |