Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否使用参数筛选CayenneDataObject getXXXArray()项?_Java_Orm_Apache Cayenne - Fatal编程技术网

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:迈克尔·金特里