2010年4月3日星期六

ADF_056:当表结构发生变化时,如何同步到ADF-BC中的EO?

实际应用中,我们经常遇到数据库Schema发生改动,如添加和减少字段,修改字段类型,等等。
这时,已经生成的ADF-BC中的EO如何随之改变。JDeveloper 11g中已经考虑了这个问题。
下面我们以HR Schema中的Employees表为例说明。
为了不破坏原有的Employees表,我们复制并创建一个新表:Employees_Backup。
执行SQL语句:
CREATE TABLE employees_backup AS SELECT * FROM employees;
该语句会创建表Employees_Backup,表结构和数据完全和Employees表一样。
如果不想复制数据,可以执行:
CREATE TABLE employees_backup AS SELECT * FROM employees WHERE 1=2;

下面我们就以employees_backup表为例,来说明如何同步EO。

1. 当数据库表发生改变时,右键点击EO,选择“Synchronize with Database”

2. 如果数据库表没有任何改变,会提示“没啥可同步的”

3. 如果数据库表增加了一个字段,比如MiddleName
手工为表增加一个字段后,右键点击EO,选择“Synchronize with Database”,会发现

点击“Synchronize All",EO会随之改变

但EO对应的VO不会自动改变,需要手工增加

4. 如果数据库表删除了一个字段,比如MiddleName
出于安全起见,EO中对应的字段会变成Transient类型

可以发现,EO的MiddleName字段不再对应数据库表中的字段,而是对应到:“Synchronize:Fix_SQL”。

开发人员确认该字段不需要后,可以手工删除该字段。
如果删除时,有其它地方使用该字段,会提示

因为VO中还在使用这个字段,所以要先删除VO中的对应字段。

5. 如果数据库表修改了一个字段,比如把LastName的长度从25改到30

可以看到EO中的字段长度变成了30

引用该EO的VO,同样可以看到VO中的字段长度变成了30,无需人工修改。

6. 如果数据库表修改了一个字段,比如把Phone_Number从Varchar2类型改为Number类型

EO和VO会自动随之修改,无需人工修改。


7. 如果数据库表修改了一个字段,比如把Commission_PCT的名称改为Commission

在EO中,你会发现增加了一个字段:Commission,同时原有字段CommissionPct依然保留,不过变成了transient类型。
修改字段名称相当于做了一个增加(新字段)和删除(旧字段)的操作。

这时,需要我们手工删除CommissionPct字段,同时,需要手工处理引用该字段的VO。

参考文献:
1. http://jdeveloperfaq.blogspot.com/2010/02/faq-15-how-to-synchronize-adf-entity.html

没有评论: