使用Apache Cayenne过滤数据库中不存在的自定义字段

时间:2015-05-12 11:52:17

标签: java api orm apache-cayenne

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

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

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

Document.getAccount在API中公开,但由于它不是数据库字段,因此无法对其进行过滤。我需要能够过滤Document.getAccount之类的字段。

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

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

有什么想法吗?感谢所有帮助。

1 个答案:

答案 0 :(得分: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);