您的位置:首页 > 产品设计 > UI/UE

ADF Model: DBSequence(讨论一) 2009-12-05 11:18:38

2015-08-14 15:37 453 查看
ADF Model: DBSequence(讨论一) 2009-12-05
11:18:38

分类: Java技术

Go to My Oracle Blog

刚开始使用ADF的同学基本都会问这样一个问题:

以HR schema为例:

如果列EMPLOYEE_ID的值由数据库端的Sequence负责产生,并且Sequence由Insert触发器调用,那么在中间层创建Employee的业务逻辑中当然不必考虑为此列赋值。

结果是,在ADF Faces或是JSF页面上进行创建Employee操作之后,发现EMPLOYEE_ID是一个负数,而所使用Sequence不产生负数。数据库内的值正常。

为了避免发生中间件Cache和数据库不同步的情况,需要了解Oracle专门为Sequence+Trigger这样的搭配***的一个domain class: oracle.jbo.domain.DBSequence。

如果把Entity Object的属性:EmployeeID的类型申明为DBSequence,那么就等于告诉了ADF Model以下几点信息:

1. 在Insert的时候这个列没必要让用户赋值。

2. 在Insert前为了确保它的值在Cache中唯一性,临时赋予一个唯一的负值。

3. 在Insert时不会先到数据库中取Sequence的值,而是直接插入。这样对性能有好处。

4. 在Insert后把获得的Sequence值从数据库再刷新回Entity Object的Cache。

实际上,当你使用触发器为列发放唯一值时,不一定要通过Sequence, 都可以利用oracle.jbo.domain.DBSequence。

所以,在这里我们不因该把EmployeeID的类型设为NUMBER或是其他什么,只要修改成DBSequence就解决问题了。

Todd
[@more@]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: