使用ADF-BC级联删除主从记录
2015-08-10 14:47
381 查看
开发环境:JDeveloper 11.1.2.2.0 + Oracle XE Database 10gR2。
首先要明确一下级联删除应该什么情况下使用。
使用级联删除一般满足两个条件:
(1)A和B两个对象为主从关系,A为主,B为从。
(2)如果A对象不存在了,那么B对象也没有存在的意义。
也就是说,A和B的关系是合成(Composition)关系,详细说明请参考《UML中的类图
Class Diagram 》。
举例说明:
(1)员工对象Employees和工作历史JOB_HISTORY就属于合成(Composition)关系。
每个员工对象都可能有多个工作历史对象,当员工对象不存在了,与之关联的工作历史对象也没有存在的意义了。
(2)部门对象Departments和员工对象Employees就不属于合成(Composition)关系,因为即使部门对象不存在了,该部门下的员工仍然可以存在。
下面就以HR Schema中的Employees表和JOB_HISTORY表为例,来说明如何使用级联删除功能。
1. 实验准备:插入数据
INSERT INTO employees(EMPLOYEE_ID,FIRST_NAME,LAST_NAME,EMAIL,HIRE_DATE,JOB_ID) VALUES (901,'Ping','Ma','ping.ma2@oracle.com','26-AUG-2011','AD_PRES');
COMMIT;
UPDATE employees SET JOB_ID='FI_MGR' WHERE EMPLOYEE_ID=901;
COMMIT;
UPDATE employees SET JOB_ID='AD_VP' WHERE EMPLOYEE_ID=901;
COMMIT;
插入Employee对象后,再两次修改JOB_ID,这样在JOB_HISTORY表中会发现多了2条记录。
这是因为Employee表上有Trigger,当修改JOB_ID时,它会帮助我们向JOB_HISTORY表中插入数据。
2. 创建ADF Web应用
这一步比较简单,选择HR Schema中的Employees表和JOB_HISTORY表生成EO和VO就可以了。
3. 在默认配置下,运行AM
(1)选择EmployeeId=901的记录,点击删除,并Commit,会报出异常。
查看详细信息:发现Child Record,无法删除。
4. 修改JhistEmpFKAssoc association,使其支持级联删除
重新运行AM,选择EmployeeId=901的记录,点击删除,并Commit,记录被成功删除了。
查看JOB_HISTORY表,发现相关记录也被删除了。
参考文献:
1. http://my.opera.com/isaias.barroso/blog/cascade-delete-on-adf
2. http://blogs.oracle.com/raghuyadav/entry/adf_entities_association_-_cas
3. http://technology.amis.nl/blog/249/another-jdeveloper-extension-force-delete-utility-for-viewobjects-adf-business-components-pka-bc4j
create table dep (did number not null, dname varchar2(40), modified_by varchar2(40), modified_on Date, primary key (did));
create table emp (eid number not null, ename varchar2(40), did number,primary key (eid), foreign key(did) references dep(did));
from:
http://maping930883.blogspot.com/2010/04/adf057adf-bc.html
首先要明确一下级联删除应该什么情况下使用。
使用级联删除一般满足两个条件:
(1)A和B两个对象为主从关系,A为主,B为从。
(2)如果A对象不存在了,那么B对象也没有存在的意义。
也就是说,A和B的关系是合成(Composition)关系,详细说明请参考《UML中的类图
Class Diagram 》。
举例说明:
(1)员工对象Employees和工作历史JOB_HISTORY就属于合成(Composition)关系。
每个员工对象都可能有多个工作历史对象,当员工对象不存在了,与之关联的工作历史对象也没有存在的意义了。
(2)部门对象Departments和员工对象Employees就不属于合成(Composition)关系,因为即使部门对象不存在了,该部门下的员工仍然可以存在。
下面就以HR Schema中的Employees表和JOB_HISTORY表为例,来说明如何使用级联删除功能。
1. 实验准备:插入数据
INSERT INTO employees(EMPLOYEE_ID,FIRST_NAME,LAST_NAME,EMAIL,HIRE_DATE,JOB_ID) VALUES (901,'Ping','Ma','ping.ma2@oracle.com','26-AUG-2011','AD_PRES');
COMMIT;
UPDATE employees SET JOB_ID='FI_MGR' WHERE EMPLOYEE_ID=901;
COMMIT;
UPDATE employees SET JOB_ID='AD_VP' WHERE EMPLOYEE_ID=901;
COMMIT;
插入Employee对象后,再两次修改JOB_ID,这样在JOB_HISTORY表中会发现多了2条记录。
这是因为Employee表上有Trigger,当修改JOB_ID时,它会帮助我们向JOB_HISTORY表中插入数据。
2. 创建ADF Web应用
这一步比较简单,选择HR Schema中的Employees表和JOB_HISTORY表生成EO和VO就可以了。
3. 在默认配置下,运行AM
(1)选择EmployeeId=901的记录,点击删除,并Commit,会报出异常。
查看详细信息:发现Child Record,无法删除。
4. 修改JhistEmpFKAssoc association,使其支持级联删除
重新运行AM,选择EmployeeId=901的记录,点击删除,并Commit,记录被成功删除了。
查看JOB_HISTORY表,发现相关记录也被删除了。
参考文献:
1. http://my.opera.com/isaias.barroso/blog/cascade-delete-on-adf
2. http://blogs.oracle.com/raghuyadav/entry/adf_entities_association_-_cas
3. http://technology.amis.nl/blog/249/another-jdeveloper-extension-force-delete-utility-for-viewobjects-adf-business-components-pka-bc4j
create table dep (did number not null, dname varchar2(40), modified_by varchar2(40), modified_on Date, primary key (did));
create table emp (eid number not null, ename varchar2(40), did number,primary key (eid), foreign key(did) references dep(did));
from:
http://maping930883.blogspot.com/2010/04/adf057adf-bc.html
相关文章推荐
- uploadify(或swfupload)刷新页面时IE下不断报JS Error的bug的处理
- 一款代码精简的JS鼠标拖动DIV层效果
- eclipse中配置dtd和xsd文件实现自动提示
- leetcode 日经贴,Cpp code -Repeated DNA Sequences
- warning LNK4075: 忽略”/EDITANDCONTINUE”(由于”/INCREMENTAL:NO”规范)
- web.xml 中的listener、 filter、servlet 加载顺序及其详解
- Jquery常用工具函数总结
- 基于64位CentOS6.4安装JDK8.0
- 《Linux设备驱动开发详解:基于最新的Linux 4.0内核》china-pub 预售
- (4.2.16) Android 跳转应用市场的应用详情页
- Axis2开发WebService客户端 的3种方式
- Spring ClassPathXmlApplicationContext和FileSystemXmlApplicationContext
- AsyncTask与Handler
- 诸葛亮《诫子书》
- Magento 把所有产品的Special Price的值,给Group Price,然后清空Special Price的值
- Linux基础学习笔记-第一课:杂项
- 中国创客面临无限挑战
- hdu1558(并查集和简单几何的结合)
- 知识点五:BluetoothAdapter类分析
- Android注解框架AndroidAnnotations学习笔记