实际应用中,我们经常遇到数据库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
没有评论:
发表评论