簡體   English   中英

使用Apache Cayenne過濾數據庫中不存在的自定義字段

[英]Filter custom fields not present in database using Apache Cayenne

在我的API中,當前可以過濾數據庫中存在的所有字段。

過濾是在API項目的FilterUtils.java中實現的。 這會將url參數轉換為Apache Cayenne搜索,並將結果返回給資源。

在“ Main”項目中,為com.foo.bar.auto中的每個數據庫表生成了類,這些類由com.foo.bar中的類擴展。 com.foo.bar中的類可以具有自定義函數。 一個示例是Document.getAccount。

API中公開了Document.getAccount,但由於它不是數據庫字段,因此無法對其進行過濾。 我需要能夠過濾Document.getAccount字段。

是否可以以某種方式在Cayenne中注冊這些功能?

搜索自定義字段的語法必須等於當今的過濾語法。 因此,在搜索帳戶時應如下所示: Document?filter=account(EQ)1234

有任何想法嗎? 感謝所有幫助。

最好的選擇是將過濾器鍵分為持久性屬性和非持久性屬性。 然后,您將構建2個表達式,每個鍵子集一個。 使用第一個表達式構建要從數據庫獲取的查詢,第二個表達式-將返回的結果過濾到內存中:

Expression p = ...
Expression np = ...

SelectQuery query = new SelectQuery(Document.class, p);
List<Document> docs = context.performQuery(query);

List<Document> filteredDocs = np.filterObjects(p);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM