使用ADF-BC级联删除主从记录

开发环境: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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值