【问题标题】:Google DataStore - how to fetch data by ID/Name?Google DataStore - 如何按 ID/名称获取数据?
【发布时间】:2012-03-22 02:07:29
【问题描述】:

我正在尝试为 DataStore 编写查询。

我知道 DataStore 会自动为每一行分配一个唯一的“ID/名称”,我想从具有特定“ID/名称”的行中获取数据。

我正在执行以下操作,但它不起作用:

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Query query = new Query("ListOfMessages");
query.addFilter("**ID/Name**", Query.FilterOperator.EQUAL, message_id);
List<Entity> users = datastore.prepare(query).asList(FetchOptions.Builder.withLimit(1));
for (Entity user : users) 
{
    message=(String) user.getProperty("smil_message");
}
System.out.println("message"+message);

我做错了什么?

【问题讨论】:

    标签: java google-app-engine google-cloud-datastore


    【解决方案1】:

    最好的方法是使用get 而不是查询:

    datastoreService.get(KeyFactory.createKey("ListOfMessages", message_id));
    

    如果你必须查询,属性名称是__key__,你需要过滤一个完全构造的键,而不仅仅是message_id。

    query.addFilter("__key__", Query.FilterOperator.EQUAL, KeyFactory.createKey("ListOfMessages", message_id));
    

    【讨论】:

    • 获取无效。所以这就是我所做的: Entity e = datastore.get(KeyFactory.createKey("ListOfMessages", message_id)); String mes=(String)e.getProperty("smil_message");------收到错误:没有找到与键匹配的实体:ListOfMessages("23") System.out.println("mes"+mes) ;
    • 并且 query.addFilter(...) 没有返回任何内容。
    • 听起来您要获取的对象可能不存在。仔细检查实体种类名称和 ID。另外,请确保您的密钥应该是 String 而不是 Long,并且 message_id 的类型与之匹配~
    • 你是对的。密钥设置为 long。如何将其更改为字符串。非常感谢。
    • 更改密钥的唯一方法是删除此实体并存储具有所有相同属性和新密钥的不同实体。键的字符串/长度在您使用 KeyFactory 创建时确定
    猜你喜欢
    • 1970-01-01
    • 2012-12-27
    • 2012-05-16
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 2022-10-16
    • 1970-01-01
    相关资源
    最近更新 更多