# 开发EOS数据实体级联操作

数据实体的级联操作存在于拓展操作类DatabaseExt(com.eos.foundation.database.DatabaseExt)中,主要有级联方式删除一条记录、级联方式新增一条记录、级联方式更新一条记录等。

在Stuido中可以创建3种不同类型的实体,分别是实体、持久化实体、查询实体,以及4种关联关系。关联关系会在关联 (opens new window)中说明。

# 级联方式删除一条记录

# 【功能说明】

级联方式删除一条记录(只支持单层聚合方式1->n的级联操作)。只删除聚合关系(1->n)的n端的子对象记录。

# 【版本说明】

从EOS 6.0开始提供。

# 【引用路径】

  1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.deleteEntityCascade,包含在com.eos.foundation.jar中。
  2. 运算逻辑定义在构件包com.eos.foundation中。

# 【使用说明】

  1. 参数说明
类型 名称 数据类型 参数描述
类型 名称 数据类型 参数描述
参数 dsName String 数据源名称
参数 entity DataObject 数据实体
  1. 抛出异常说明 无。

  2. 规则说明 无。

# 【参考案例】

示例:本例用来删除组织及其所拥有的操作员。

  • 场景描述 删除组织及其所拥有的操作员。

  • 参数设置

类型 名称 数据类型 值类别 传递方式
参数 dsName String default 常量 传引用
参数 entity DataObject org 变量 传引用
  • 参数描述

    • 第一个参数为数据源,更多的说明参见基本操作类DatabaseUtil中的注意
    • 第二个参数为数据实体(一对多的数据实体)
  • 其他说明 只支持单层聚合方式1->n的级联操作。

  • 调用前的bizContext

<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <org __id="1" __type="sdo:com.primeton.eos.foundation.example.data.O_ORG">
            <ORG_ID __type="java:java.lang.Long">5</ORG_ID>
            <PARENT_ORG_ID/>
            <ORG_NAME/>
            <ORG_CODE/>
            <ORG_ADDRESS/>
            <ORG_SEQ/>
            <O_OPERATORS __collection="list"/>
        </org>
    </__root>
</bizContext>
  • 等效的SQL语句
delete from O_OPERATOR where O_OPERATOR.ORG_ID=5
delete from O_ORG where ORG_ID=5
  • 调用后的bizContext 同调用前。

# 级联方式新增一条记录

# 【功能说明】

级联方式新增一条记录(只支持单层聚合方式一对多的级联操作,不支持一对一级联)。如果主键字段值为空将自动生成一个主键。

# 【版本说明】

从EOS 6.0开始提供。

# 【引用路径】

  1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.insertEntityCascade,包含在com.eos.foundation.jar中。
  2. 运算逻辑定义在构件包com.eos.foundation中。

# 【使用说明】

  1. 参数说明
类型 名称 数据类型 参数描述
参数 dsName String 数据源名称
参数 entity DataObject 数据实体
  1. 抛出异常说明 无。

  2. 规则说明 无。

# 【参考案例】

示例:本案例用于新增组织和操作员信息。

  • 场景描述

    无。

  • 参数设置

类型 名称 数据类型 值类别 传递方式
参数 dsName String default 常量 传引用
参数 entity DataObject org 变量 传引用
  • 参数描述

    • 第一个参数为数据源,更多的说明参见基本操作类DatabaseUtil中的注意
    • 第二个参数为数据实体(一对多的数据实体)
  • 其他说明 无。

  • 调用前的bizContext

<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <org __id="1" __type="sdo:com.primeton.eos.foundation.example.data.O_ORG">
            <ORG_ID __type="java:java.lang.Long">5</ORG_ID>
            <PARENT_ORG_ID/>
            <ORG_NAME __type="java:java.lang.String">org_5</ORG_NAME>
            <ORG_CODE __type="java:java.lang.String">org_5</ORG_CODE>
            <ORG_ADDRESS/>
            <ORG_SEQ/>
            <O_OPERATORS __id="2" __type="java:com.primeton.ext.data.sdo.collection.ContainerAwareList">
                <__entry __id="3" __index="0"
__type="sdo:com.primeton.eos.foundation.example.data.O_OPERATOR">
                    <OPERATOR_ID __type="java:java.lang.Long">51</OPERATOR_ID>
                    <USER_ID/>
                    <USER_NAME __type="java:java.lang.String">oper_51</USER_NAME>
                    <BIRTHDAY/>
                    <GENDER/>
                    <POSTCODE/>
                    <ADDRESS/>
                    <PHONE/>
                    <EMAIL/>
                    <MEMO/>
                    <ORG_ID/>
                    <O_ORG __refid="1"/>
                </__entry>
                <__entry __id="4" __index="1"
__type="sdo:com.primeton.eos.foundation.example.data.O_OPERATOR">
                    <OPERATOR_ID __type="java:java.lang.Long">52</OPERATOR_ID>
                    <USER_ID/>
                    <USER_NAME __type="java:java.lang.String">oper_52</USER_NAME>
                    <BIRTHDAY/>
                    <GENDER/>
                    <POSTCODE/>
                    <ADDRESS/>
                    <PHONE/>
                    <EMAIL/>
                    <MEMO/>
                    <ORG_ID/>
                    <O_ORG __refid="1"/>
                </__entry>
            </O_OPERATORS>
        </org>
    </__root>
</bizContext>
  • 等效的SQL语句
insert into O_ORG (ORG_NAME, ORG_CODE, ORG_ID) values ('org_5', 'org_5', 5)
insert into O_OPERATOR (USER_NAME, ORG_ID, OPERATOR_ID) values ('oper_51', 5, 51)
insert into O_OPERATOR (USER_NAME, ORG_ID, OPERATOR_ID) values ('oper_52', 5, 52)
  • 调用后的bizContext 同调用前。

# 级联方式更新一条记录

# 【功能说明】

级联方式更新一条记录(只支持单层聚合方式1->n的级联操作)。

级联更新规则如下:

  • 如果指定的N端属性没有设置要更新的值,N端对应的记录会被全部删除。

  • 如果指定的N端属性设置了需要更新的值:

    • 先删除N端的没有在要更新的值列表的记录,根据主键删除。

    • 如果要更新的值里有数据库中不存在的值,则执行insert。

    • 如果要更新的值里是数据库中已存在的值,则执行update。

      说明

      如果没有设置N端属性要更新的值,又不想删除N端对应的记录时,可以将要级联更新的属性名称设为"__null"。

# 【版本说明】

从EOS 6.0开始提供。

# 【引用路径】

  1. 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.updateEntityCascade,包含在com.eos.foundation.jar中。
  2. 运算逻辑定义在构件包com.eos.foundation中。

# 【使用说明】

  1. 参数说明
类型 名称 数据类型 参数描述
参数 dsName String 数据源名称
参数 entity DataObject 数据实体
参数 property String... 级联更新的从表属性名称(变参,可以是多个)
  1. 抛出异常说明 无。

  2. 规则说明 无。

# 【参考案例】

示例:本例用来更新组织及其操作员。

  • 场景描述: 更新组织及其操作员。

  • 参数设置

类型 名称 数据类型 值类别 传递方式
参数 dsName String default 常量 传引用
参数 entity DataObject org 变量 传引用
参数 property String O_OPERATORS 常量 传引用
  • 参数描述

    • 第一个参数为数据源,更多的说明参见基本操作类DatabaseUtil中的注意
    • 第二个参数为数据实体(一对多的数据实体)
    • 第三个参数为级联更新的从表属性名称(O_OPERATORS)
  • 其他说明 只支持单层聚合方式1->n的级联操作。

  • 调用前的bizContext

<bizContext>
    <__root __id="0" __type="java:java.util.HashMap">
        <org __id="1" __type="sdo:com.primeton.eos.foundation.example.data.O_ORG">
            <ORG_ID __type="java:java.lang.Long">5</ORG_ID>
            <PARENT_ORG_ID/>
            <ORG_NAME/>
            <ORG_CODE/>
            <ORG_ADDRESS/>
            <ORG_SEQ/>
            <O_OPERATORS __id="2" __type="java:com.primeton.ext.data.sdo.collection.ContainerAwareList">
                <__entry __id="3" __index="0"
__type="sdo:com.primeton.eos.foundation.example.data.O_OPERATOR">
                    <OPERATOR_ID __type="java:java.lang.Long">51</OPERATOR_ID>
                    <USER_ID/>
                    <USER_NAME __type="java:java.lang.String">update_oper_51</USER_NAME>
                    <BIRTHDAY/>
                    <GENDER/>
                    <POSTCODE/>
                    <ADDRESS/>
                    <PHONE/>
                    <EMAIL/>
                    <MEMO/>
                    <ORG_ID/>
                    <O_ORG __refid="1"/>
                </__entry>
                <__entry __id="4" __index="1"
__type="sdo:com.primeton.eos.foundation.example.data.O_OPERATOR">
                    <OPERATOR_ID __type="java:java.lang.Long">52</OPERATOR_ID>
                    <USER_ID/>
                    <USER_NAME __type="java:java.lang.String">update_oper_52</USER_NAME>
                    <BIRTHDAY/>
                    <GENDER/>
                    <POSTCODE/>
                    <ADDRESS/>
                    <PHONE/>
                    <EMAIL/>
                    <MEMO/>
                    <ORG_ID/>
                    <O_ORG __refid="1"/>
                </__entry>
            </O_OPERATORS>
        </org>
    </__root>
</bizContext>
  • 等效的SQL语句
delete from O_OPERATOR where not (O_OPERATOR.OPERATOR_ID=51 and O_OPERATOR.OPERATOR_ID=52)
                    and O_OPERATOR.ORG_ID=5
insert into O_OPERATOR (USER_NAME, ORG_ID, OPERATOR_ID) values ('update_oper_51', 5, 51)
insert into O_OPERATOR (USER_NAME, ORG_ID, OPERATOR_ID) values ('update_oper_52', 5, 52)
  • 调用后的bizContext 同调用前。
上次更新: 2023/3/20下午3:44:43