我省略了一些代码(包声明,导入,其他字段) 为了简短。 我这里有简单的一对多关系。 它一直工作到现在为止。
@PersistenceCapable(identityType = IdentityType.APPLICATION,
detachable="true")
class Restaurant implements Serializable {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
Key id
@Persistent(mappedBy = "restaurant")
List<RestaurantAddress> addresses = new ArrayList<RestaurantAddress>()
}
// - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - =
@PersistenceCapable(identityType = IdentityType.APPLICATION,
detachable="true")
class RestaurantAddress implements Serializable {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
Key id
@Persistent
Restaurant restaurant
}
现在我需要从DB中获取(选择)所有餐馆:
def getRestaurantsToExport(final String dst, final int count) {
String field = restaurantExportFields[dst]
return transactionExecute() { PersistenceManager pm ->
Query q = pm.newQuery(Restaurant.class)
q.filter = "$field == null"
q.setRange(0, count)
return q.execute()
}
}
但是有问题 - 查询给了我12家餐馆(如DB)但是 每个餐厅都有0个地址,但在Datastore每个餐厅都有 最少2个地址。
有任何人遇到同样的问题或知道解决方案吗?
答案 0 :(得分:1)
你确定地址不是延迟加载的吗?只是一个猜测...是否有某种方法迫使“急切”加载对象
答案 1 :(得分:1)
如果有人会遇到同样的问题:
<强>替换强>
@Persistent(mappedBy = "restaurant")
List<RestaurantAddress> addresses = new
ArrayList<RestaurantAddress>
<强>与强>
@Persistent(mappedBy = "restaurant",defaultFetchGroup = "true")
List<RestaurantAddress> addresses = new
ArrayList<RestaurantAddress>
另一种方法是您必须“触摸”地址属性 关闭之前检索列表中的每个餐厅 PersistentManager。 PersistenManager关闭后你不能 从数据存储中检索任何内容,而餐厅保持为空。
在google-appengine-java个用户的帮助下找到解决方案。