WebObjects/資料庫開發
如果您習慣於使用 SQL 的思維方式,WO(實際上是 EOF)處理行(物件)的方式可能會讓人困惑。使用 WO 處理資料庫行的總體思路是
要從持久層獲取物件(從資料庫中檢索記錄,這些記錄將在執行時被轉換為 EnterpriseObjects),請執行以下操作
- 建立您的 EOModel 或獲取適合的 EOModel
- 宣告您要儲存企業物件的 NSArray,這些企業物件將由表的行轉換為
- 建立您的編輯上下文,“ec”(對於簡單情況,只需使用 WOSession.defaultEditingContext,否則,請確保鎖定/解鎖)。
- 建立一個 EOQualifier(如果您想過濾來自特定表的物件)
- 建立一個 EOSortOrderings 集合(如果您希望在檢索記錄時預先排序)
- 建立一個 EOFetchSpecification,fs,將獲取操作繫結在一起
- 執行 ec.objectsWithFetchSpecification(fs);
要獲取與您已獲取的任何 EnterpriseObjects 相關的任何物件(具有 EORelationship),只需像引用由另一個 POJO(Plain Old Java Object)引用的任何物件一樣引用它們。該引用足以讓 WO “引發錯誤”,從而自動為您檢索引用的物件。
如果您已經完成了從資料庫獲取物件的足夠操作,那麼要更新記錄,只需更新物件的相應欄位(最好使用 get/set 方法)並執行
ec.saveChanges();
雖然有很多方法可以做到這一點,但最安全且可能最有效的方法是使用
EOUtilities.createAndInsertInstance(ec, "myNewEntitiesName"); ec.saveChanges();
要刪除物件,首先必須顯式地從 ec 中刪除它,然後儲存更改
ec.deleteObject(myObject); ec.saveChanges();
如果您有兩個具有 EORelationship 的 EnterpriseObject 類,例如一對多關係,如下所示
A <-->> B
或
objectA
className
myBs ( -->>B )
objectB
name
myA ( -->A )
那麼要建立兩個這樣的物件並將它們彼此關聯,您需要
myA = (A)EOUtilities.createAndInsertInstance(ec, "A"); myB = (B)EOUtilities.createAndInsertInstance(ec, "B"); myA.addObjectToBothSidesOfRelationshipWithKey(b, "myBs"); // set other attributes of both myA and myB here. ec.saveChanges();
當然,您也可以使用
myB.addObjectToBothSidesOfRelationshipWithKey(a, "myA");
需要注意的是,addObjectToBothSidesOfRelationshipWithKey 方法只需要在一個物件上使用一次,就可以在兩個方向上建立關係,無論關係是 toOne 還是 toMany,以及關係是雙向的還是單向的。這是一個非常有用的方法。
另請參閱 removeObjectFromBothSidesOfRelationshipWithKey,它用於刪除關係。
一般來說,請記住編輯上下文的目的是為您的程式提供一個執行時上下文,在這個上下文中,每個 EnterpriseObject 都是唯一的(在編輯上下文中),並且您可以在該編輯上下文中建立、新增、更新和刪除物件。但是,一般來說,您在編輯上下文中所做的任何操作都不會反映在資料庫中,直到您執行 ec.saveChanges()。然後,您自上次 saveChanges() 以來所做的所有更改都將提交到資料庫。
當然,上述內容有一些例外情況,但這應該是您記住它的最佳方式。
當然,還有很多關於 WebObjects 的內容需要了解,但瞭解上述內容應該能幫助您很多,至少能為您提供在 API 參考中查詢許多想法的線索。
如果您是 WO 的新手,請務必閱讀EOF 誡律,以避免一些嚴重的問題。
如果您對任何誡律都不瞭解,請諮詢他人。