我是Appengine的新手,我想念亲子关系。当然,文档总是非常轻松......
我定义了这个
@Entity
public class StockRow {
@Parent Key<StockTable> table;
@Id Long id;
Long quantity;
String status;
String type;
String table;
private StockRow () {}
public StockRow (String tableName, com.google.appengine.api.datastore.Entity queryResult) {
id = queryResult.getKey().getId();
quantity = (Long) queryResult.getProperty("quantity");
status = (String) queryResult.getProperty("status");
type = (String) queryResult.getProperty("stock-name");
table = StockTable = Key.create(StockTable.class, tableName);
}
}
(我在这里压制吸气剂)
这是孩子:一排。
然后父母
@Entity
public class StockTable {
@Id public String table;
private StockTable () {}
}
非常简单。
我有两个问题:
我想要一个包含多行的表格。表包含具有相同ID的行。 因此,Stocktable的ID是其所有行共享的ID。
1)这是正确的做法吗?
StockRow必须是实体,因为我从Datastore查询它们。 也许它是容器,但我不明白......
或者定义父母可能没用?
2)如何为给定的id加载所有孩子?
我在Objectif wiki上看过这个,但这个查询的目的不是很明确:
Thing th = ofy().load().type(Thing.class).parent(par).id(123L).now();
我首先不知道par
内部是什么,其次我觉得这种负荷不是我想要的。
谢谢!
答案 0 :(得分:0)
是的,这是正确的方法。 $(function() {
setInterval(function() {
startRefresh();
}, 3000)
});
function startRefresh() {
$.post('pollchat.php', function(data) {
$('#content_div_id').html(data);
$('#content_div_id').scrollTop($('#content_div_id')[0].scrollHeight);//scrolls to bottom of div #content_div_id
});
}
是父级,具有多个StockTable
,而行ID仅适用于每个表。
为表加载所有子项:
StockRow
答案 1 :(得分:0)
你的设计似乎很好。实体由其类型,其祖先及其字符串或数字ID唯一标识。使用当前模型,假设您创建一个名称为“A”的StockTable实体(由Java类中的表字段标记)。然后,添加ID为100和200的StockRow实体。
StockTable键将是:
[StockTable/"A"]
StockRow键是:
[StockTable/"A", StockRow/100]
[StockTable/"A", StockRow/200]
Objectify允许您通过单独指定每个部分来查询这些键:
List<StockRow> rows = ObjectifyService.ofy()
.type(StockRow.class)
.ancestor(Key.create(StockTable.class, "A"))
.id(100)
.list();
您还可以通过省略.id(...)
电话来查询StockTable“A”中的所有StockRow实体。
至于问题:“或者定义一个父母可能没用?”
除了设计原因之外,有一个很好的理由来定义祖先。没有祖先的“顶级”实体定义“实体组”。在您的示例中,每个唯一的StockTable都代表一个实体组。单个实体组内的数据存储区查询(例如,读取此StockTable中的所有StockRows)可保证一致的结果,因此您知道它们是最新的。在多个实体组中返回结果的查询仅保证最终一致的结果,这些结果可能不是最新的,并且可能无法反映数据的单个一致快照。您可以阅读更多相关信息here。