0

在我的 API 中,目前可以过滤数据库中存在的所有字段。

过滤在 API 项目的 FilterUtils.java 中实现。这会将 url 参数转换为 Apache Cayenne 搜索并将结果返回给资源。

在“主”项目中,为 com.foo.bar.auto 中的每个数据库表生成了类,这些类由 com.foo.bar 中的类扩展。com.foo.bar 中的类可以有自定义函数。一个例子是 Document.getAccount。

Document.getAccount 在 API 中公开,但无法过滤它,因为它不是数据库字段。我需要能够过滤像Document.getAccount.

是否可以以某种方式在 Cayenne 中注册这些功能?

搜索自定义字段的语法需要与今天的过滤语法相同。因此,在搜索帐户时,它应该如下所示:Document?filter=account(EQ)1234.

有任何想法吗?感谢所有帮助。

4

1 回答 1

0

最好的办法是将过滤器键拆分为持久性和非持久性属性。然后,您将构建 2 个表达式,一个用于每个键子集。使用第一个表达式构建查询以从 DB 中获取,第二个表达式 - 过滤内存中的返回结果:

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

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

List<Document> filteredDocs = np.filterObjects(p);
于 2015-05-13T08:38:08.417 回答