* 我可以在entitymodel.xml文件中定義自己的view-entities嗎?
不能, 你可以動態定義它們.你可以查看org.ofbiz.party.party.PartyServices中的findParty方法學習它的使用
* 如果為有效期間創建條件?
我們提供了一組非常有用的方法EntityUtil.getFilterByDateExpr ,它能返回一個EntityConditionList根據有效期間來篩選一個結果集.
* 如何在大數據結果集下工作
如果你檢出一個大的數據結果集,你應當使用EntityListIterator通過迭代方式讀取數據,而非List.
示例,如果你使用:
List products = delegator.findAll("Product");
你可能獲得一個"java.lang.OutOfMemoryError". 這是由于你通過findAll, findByAnd, findByCondition等方法來獲得一個大的內存數據結果集導致內存溢出. 在這種情況下, 應該使用EntityListIterator迭代方式來讀取你的數據. 這個示例應改寫成:
productsELI = delegator.findListIteratorByCondition("Product", new EntityExpr("productId", EntityOperator.NOT_EQUAL, null), UtilMisc.toList("productId"), null);
注意獲得EntityListIterator的方法只用通過條件, 所以你需要將你的條件重寫為EntityExpr (在此次情況下,productId是主鍵字段不可能為空的, 所以將返回所有Proudct實例,)或 EntityConditionList.
此方法參數中包含檢出的字段(這里為productId)以及排序字段(這里不需要,所以賦了null)
你可以傳遞一個null作為EntityCondition參數來獲得所有結果.然后這不一定在所有數據庫下都能正常工作! 在maxdb及其它不常用的數據庫下時你要小心使用這些高級功能.
* 如何使用EntityListIterator
當我們通過EntityListIterator迭代訪問數據時, 通常是這樣:

while ((nextProduct = productsELI.next()) != null)
{

.
// operations on nextProduct
}
在EntityListIterator 中使用 .hasNext()方法是一種不經濟的做法.
在你完成你的操作后,要記得關閉此迭代
productsELI.close();
* 如何查詢無重結果集
當前只能通過list iterator方法并指定EntityFindOptions參數,示例如下:
listIt = delegator.findListIteratorByCondition(entityName, findConditions,
null, // EntityConditions參數
fieldsToSelectList,
fieldsToOrderByList,
//關鍵部分. 第一個true表示"specifyTypeAndConcur"
// 第二個true指完是一個濾重查詢. 顯然在實體引擎中只能通過這個方法來進行濾重查詢
new EntityFindOptions(true, EntityFindOptions.TYPE_SCROLL_INSENSITIVE, EntityFindOptions.CONCUR_READ_ONLY, true));
在minilang, 它會更簡單:
<entity-condition entity-name="${entityName}" list-name="${resultList}" distinct="true">
<select field="${fieldName}"/>
.
* 如何進行一個大小寫不敏感的查詢(即不分大小寫)
你需要查詢條件表達式兩邊均轉為大寫,示例:
andExprs.add(new EntityExpr("lastName", true, EntityOperator.LIKE, "%"+lastName+"%", true));
(來源org.ofbiz.party.party.PartyServices)
* 如何將EntityListIterator轉換成List
使用EntityListIterator.getCompleteList() 及getPartialList 方法
* 如何自動獲得下一個ID值
在minilang 中使用 <sequence-id-to-env ...> 或在Java中通過delegator.getNextSeqId(...) 獲得 . id序列存放于SequenceValueItem中.
* 關于ID值的一些警告
不要在種子/演示數據中使用10000做為數據的ID,當系統嘗試自動創建數據時,它們都將嘗試10000,這將導致一個鍵值沖突錯誤.
* 如何從一個明細項中獲得序列ID
有些實體,比如擁有itemSeqId 的InvoiceItem(發票明細項) and OrderItem(訂單明細項).此項通常在你處一次為item生成GenericValue 時自動生成ID,之后向delegator要求生成項目的seq Id:
GenericValue orderItem = delegator.makeValue("OrderItem", orderItemValues);
delegator.setNextSubSeqId(orderItem, "orderItemSeqId", ORDER_ITEM_PADDING, 1);
未完待續>>
本文檔譯自ofbiz 4.0 cookbooks,本人翻譯,歡迎轉載,請注明出處.