我试图创建一个查询,以便将给定列表(参数)的所有项包含在表的列中(该列也是一个列表)。我还需要一个查询,以便在表的列中至少包含一个给定列表(参数)的一个项。例如:
JDO:
Table: User
| ID | Name | Interests <List of Strings> |
查询:
List <String> gifts; // Item to query with
,
,
这些问题有可能吗?如果是,那怎么做?我可以使用.contains()
关键字来执行这些查询吗?如果是,那怎么做?有谁能分享一些例子吗?任何帮助都将不胜感激。
谢谢。
发布于 2011-02-21 16:07:05
为了了解这类查询是如何工作的(或不工作),了解数据存储实体是如何索引的非常重要。当插入具有list属性的实体时,数据存储将每个列表条目分解为单独的索引行。例如,以下实体:
Entity(User):
id=15
name="Jim"
interests=["Drinking", "Banjos"]
将导致自动索引中的下列索引条目:
(User, "id", 15, Key("User", 1))
(User, "name", "Jim", Key("User", 1))
(User, "interests", "Drinking", Key("User", 1))
(User, "interests", "Banjos", Key("User", 1))
如果您还在(名称、兴趣)上定义了一个复合索引,那么其中的条目如下所示:
("Jim", "Drinking", Key("User", 1))
("Jim", "Banjos", Key("User", 1))
这样,我们就可以处理您特定的查询查询,以便:
对于数字1和3,您可以通过执行一个更粗的筛选器(例如,搜索一两个兴趣项)并过滤内存中的结果来获得精确匹配。
https://stackoverflow.com/questions/5069557
复制