JDOQL 在搜索成员列表变量中是否存在一个或多个元素时,有什么方法可以避免查询中的多个 .contains() 调用吗?

发布于 2024-08-27 14:16:27 字数 478 浏览 11 评论 0原文

这个问题几乎说明了一切。

如果我有一个类 Class A

public class A {
    ...
    private List<String> keys;
    ...
}

并且我想从 DataStore 中选择至少具有一个键列表中的所有 A 实例,是否有更好的方法来做到这一点比这个:

query = pm.newQuery(A.class);
query.setFilter("keys.contains(:key1) || keys.contains(:key2) || keys.contains(:key3)");
List<A> results = (List<A>)query.execute(key1, key2, key3);

这还没有实施,所以我愿意接受激进的建议。

The question pretty much says it all.

If I have a class Class A

public class A {
    ...
    private List<String> keys;
    ...
}

And I want to select all A instances from the DataStore that have atleast one of a List of keys, is there a better way of doing it than this:

query = pm.newQuery(A.class);
query.setFilter("keys.contains(:key1) || keys.contains(:key2) || keys.contains(:key3)");
List<A> results = (List<A>)query.execute(key1, key2, key3);

This has not yet been implemented, so I am open to radical suggestions.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蓝眸 2024-09-03 14:16:27

"SELECT FROM " + A.class.getName() + " WHERE keys.contains(var) && (var == :key1 || var == :key2 || var == :key3) 变量 java.lang .String var"

或者至少我们在其他数据存储中使用的是这样的;有人猜测谷歌是否已经实现了它。

"SELECT FROM " + A.class.getName() + " WHERE keys.contains(var) && (var == :key1 || var == :key2 || var == :key3) VARIABLES java.lang.String var"

Or at least that's what we'd use with other datastores; anyones guess if Google have implemented it.

落叶缤纷 2024-09-03 14:16:27

现在它已在 gae 中实现,因此您的代码可以完美运行。
这是另一个例子:

Query query = pm.newQuery(Book.class);
query.setFilter("_AuthorKeys.contains(:key1) || _AuthorKeys.contains(:key2)");
Key key1 = KeyFactory.stringToKey("xxxxxxxxxxx");
Key key2 = KeyFactory.stringToKey("yyyyyyyyyyy");
List<Book> books = (List<Book>) query.execute(key1, key2);

或者

Query query = pm.newQuery(Book.class);
query.setFilter("_AuthorKeys.contains(:keys)");
List<Key> keys = new LinkedList();
keys.add(KeyFactory.stringToKey("xxxxxx"));
keys.add(KeyFactory.stringToKey("yyyyyy"));
List<Book> books = (List<Book>) query.execute(keys);

It's now implemented in gae so your code runs perfectly.
Here another example:

Query query = pm.newQuery(Book.class);
query.setFilter("_AuthorKeys.contains(:key1) || _AuthorKeys.contains(:key2)");
Key key1 = KeyFactory.stringToKey("xxxxxxxxxxx");
Key key2 = KeyFactory.stringToKey("yyyyyyyyyyy");
List<Book> books = (List<Book>) query.execute(key1, key2);

or

Query query = pm.newQuery(Book.class);
query.setFilter("_AuthorKeys.contains(:keys)");
List<Key> keys = new LinkedList();
keys.add(KeyFactory.stringToKey("xxxxxx"));
keys.add(KeyFactory.stringToKey("yyyyyy"));
List<Book> books = (List<Book>) query.execute(keys);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文