【问题标题】:Query all entities where a "Set" matches a specific string?查询“Set”与特定字符串匹配的所有实体?
【发布时间】:2010-07-14 07:45:50
【问题描述】:

如何查询使用 GAE 存储的对象列表,其中 Set 字段包含指定字符串?即想象这个虚构的例子:

@PersistenceCapable
class Photos {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

    String name = "";
    Set<String> tag = new Hashset<String>();
}

假设“数据库”中有40,000张照片,我如何Query所有照片tag='2009'

如果您有以下类,或者来自 google 文档的另一个示例:

@PersistenceCapable
public class Person {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

    @Persistent
    private Set<Key> favoriteFoods;

    // ...
}

如何获取所有 Person 对象的列表,其中他们有一个特定的最喜欢的食物键?

【问题讨论】:

    标签: java google-app-engine jdo


    【解决方案1】:

    你会如何在 Java 中做到这一点? collField.contains(:stringParam)

    【讨论】:

      【解决方案2】:

      试试这样的东西,基本上取自谷歌文档:

      Query query = pm.newQuery("select from com.example.Note where tag == tagname order by created");
      query.declareParameters("String tagname");
      return (List<Note>) query.execute(tag);
      

      根据下面的评论,这似乎也有效:

      Query query = pm.newQuery("select from com.example.Note where tags.contains(tagname) order by created");
      query.declareParameters("String tagname");
      return (List<Note>) query.execute(tag);
      

      【讨论】:

      • 如果您希望您的查询符合 JDO,请不要尝试这样做。您不能在 Java 中执行“Collection == String”,因此您不能在 JDOQL 中。您使用“包含(...)”
      猜你喜欢
      • 2019-04-28
      • 2017-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 2019-08-01
      • 1970-01-01
      相关资源
      最近更新 更多