# 开发EOS数据实体级联操作
数据实体的级联操作存在于拓展操作类DatabaseExt(com.eos.foundation.database.DatabaseExt)中,主要有级联方式删除一条记录、级联方式新增一条记录、级联方式更新一条记录等。
在Stuido中可以创建3种不同类型的实体,分别是实体、持久化实体、查询实体,以及4种关联关系。关联关系会在关联 (opens new window)中说明。
# 级联方式删除一条记录
# 【功能说明】
级联方式删除一条记录(只支持单层聚合方式1->n的级联操作)。只删除聚合关系(1->n)的n端的子对象记录。
# 【版本说明】
从EOS 6.0开始提供。
# 【引用路径】
- 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.deleteEntityCascade,包含在com.eos.foundation.jar中。
- 运算逻辑定义在构件包com.eos.foundation中。
# 【使用说明】
- 参数说明
类型 | 名称 | 数据类型 | 参数描述 |
---|---|---|---|
类型 | 名称 | 数据类型 | 参数描述 |
参数 | dsName | String | 数据源名称 |
参数 | entity | DataObject | 数据实体 |
抛出异常说明 无。
规则说明 无。
# 【参考案例】
示例:本例用来删除组织及其所拥有的操作员。
场景描述 删除组织及其所拥有的操作员。
参数设置
类型 | 名称 | 数据类型 | 值 | 值类别 | 传递方式 |
---|---|---|---|---|---|
参数 | 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开始提供。
# 【引用路径】
- 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.insertEntityCascade,包含在com.eos.foundation.jar中。
- 运算逻辑定义在构件包com.eos.foundation中。
# 【使用说明】
- 参数说明
类型 | 名称 | 数据类型 | 参数描述 |
---|---|---|---|
参数 | dsName | String | 数据源名称 |
参数 | entity | DataObject | 数据实体 |
抛出异常说明 无。
规则说明 无。
# 【参考案例】
示例:本案例用于新增组织和操作员信息。
场景描述
无。
参数设置
类型 | 名称 | 数据类型 | 值 | 值类别 | 传递方式 |
---|---|---|---|---|---|
参数 | 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开始提供。
# 【引用路径】
- 本运算逻辑构件对应JAVA方法路径: com.eos.foundation.database.DatabaseExt.updateEntityCascade,包含在com.eos.foundation.jar中。
- 运算逻辑定义在构件包com.eos.foundation中。
# 【使用说明】
- 参数说明
类型 | 名称 | 数据类型 | 参数描述 |
---|---|---|---|
参数 | dsName | String | 数据源名称 |
参数 | entity | DataObject | 数据实体 |
参数 | property | String... | 级联更新的从表属性名称(变参,可以是多个) |
抛出异常说明 无。
规则说明 无。
# 【参考案例】
示例:本例用来更新组织及其操作员。
场景描述: 更新组织及其操作员。
参数设置
类型 | 名称 | 数据类型 | 值 | 值类别 | 传递方式 |
---|---|---|---|---|---|
参数 | 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 同调用前。