Java 是否使用参数筛选CayenneDataObject getXXXArray()项?
我的数据库模型如下所示:Java 是否使用参数筛选CayenneDataObject getXXXArray()项?,java,orm,apache-cayenne,Java,Orm,Apache Cayenne,我的数据库模型如下所示: A.id (1 : n) B.ad_id 因此,在对象A的cayenne中,我可以执行A.getBArray,它将从给定的A条目返回B的所有条目。然而,我想根据active=1的属性筛选这个列表 显然,我可以将Expression.fromStringactive=1与SelectQuery一起使用,但对于这种方法,我无法找到如何将表达式与要在其上运行此查询的实例关联 另一种方法是从A.getBArray中检索所有条目,并在代码中只搜索那些活动==true的条目,这种
A.id (1 : n) B.ad_id
因此,在对象A的cayenne中,我可以执行A.getBArray,它将从给定的A条目返回B的所有条目。然而,我想根据active=1的属性筛选这个列表
显然,我可以将Expression.fromStringactive=1与SelectQuery一起使用,但对于这种方法,我无法找到如何将表达式与要在其上运行此查询的实例关联
另一种方法是从A.getBArray中检索所有条目,并在代码中只搜索那些活动==true的条目,这种方法效率很低
我们非常赞赏这些建议
谢谢,,
格言
-编辑:
我当前的is对象名称解决方案已分别替换为a和b:
long aId = DataObjectUtils.longPKForObject(db_a_instance);
String bSQL = "select * from b where active = 1 and a_id = " + aId;
SQLTemplate bQuery = new SQLTemplate(B.class, bSQL);
List<B> dbBs = context.performQuery(bQuery);
我想问的是,是否有更好、更优雅的解决方案
谢谢。我在Cayenne的友好邮件列表上问过类似的问题。你可以 似乎首选的方法是在Java中通过关系和过滤器,除非关系返回非常大的数据。这样做的好处是,完整的列表将存储在内存中,下次使用关系时,您不需要访问数据库 这里引用了答案 两者都需要跳闸至DB 关系中的遍历方法需要到数据库一次,以对数据库中的组进行故障诊断,但随后它将在内存中 带过滤器的查询方法每次都需要访问数据库,因此从长远来看,即使返回的匹配项较少,也可能较慢 如果这件事只发生一次,而你真的 考虑到表现,可能有很多团队,我会 选择2,否则选择1。您也可以稍微优化1,这样您就可以 不必每次都迭代检查 via:迈克尔·金特里