gpt4 book ai didi

java - 如何通过 Google Cloud Datastore JSON API 存储带有子类的类?

转载 作者:行者123 更新时间:2023-11-30 08:15:33 24 4
gpt4 key购买 nike

为了存储到GCD中,我想使用Google Cloud Datastore JSON API但我无法为具有另一个类成员的对象编写正确的 Json 请求正文。假设我有 2 类:

public class Foo {
private String id;
private Bar bar;
// getter and setter...
}

public class Bar {
private String name;
private String pass;
// getter and setter...
}

然后我创建一个 Foo 类的对象,其中包含 Bar 类的对象。所以我想将此对象插入到Cloud Datastore。我写了这个请求正文:

{
"transaction":"some bytes",
"mutation":{
"insert":[
{
"key":{
"partitionId":{
"datasetId":"s~my-dataset-id"
},
"path":[
{
"kind":"Foo",
"name":"id"
}
]
},
"properties":{
"bar":{
"entityValue":{
"name":{
"stringValue":"Jack"
},
"pass":{
"stringValue":"1234"
}
},
"indexed":false
},
"id":{
"stringValue":"id"
}
}
}
]
}
}

然后,除 bar 之外的所有字段都将保存到云数据存储中。我使用了“entityValue”,但似乎我应该包括整个实体结构(感谢 Adam 提到它)。但我不需要它作为另一个实体,显然我不应该使用“entityValue”。那么我应该如何更改请求正文来插入这样的对象呢?

顺便说一句,我可以通过以下请求插入 Bar 对象(但不是 Foo):

   {
"transaction":"some bytes",
"mutation":{
"insert":[
{
"key":{
"partitionId":{
"datasetId":"s~my-project-id"
},
"path":[
{
"kind":"Bar",
"name":"John"
}
]
},
"properties":{
"pass":{
"stringValue":"1234"
},
"name":{
"stringValue":"John"
}
}
}
]
}
}

这是相关链接:Related link

最佳答案

您可以将 Bar 包含为 entityValue。该值看起来像一个普通的实体,但它不需要有键。此实体值不需要需要单独存在于数据存储区中。

例如:

{
"mutation":{
"insert":[
{
"key":{
"path":[
{
"kind":"Foo",
"name":"id"
}
]
},
"properties":{
"bar":{
"entityValue":{
"properties": {
"name":{
"stringValue":"Jack"
},
"pass":{
"stringValue":"1234"
}
}
},
"indexed":false
},
"id":{
"stringValue":"id"
}
}
}
]
},
"mode": "NON_TRANSACTIONAL"
}

另外,请注意,此处 Foo 的键省略了 partitionId。这是首选做法,Datastore 将为您填写正确的 partitionId

关于java - 如何通过 Google Cloud Datastore JSON API 存储带有子类的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29727757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com