您好,登錄后才能下訂單哦!
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
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。