一对多关系。从数据存储中选择对象
问题描述:
为了简化,我省略了一些代码(包声明,导入,其他字段) 。 我这里有简单的一对多关系。 它工作得很好,直到这一刻。一对多关系。从数据存储中选择对象
@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
}
现在我需要获得(选择)从数据库中的所有的餐馆:
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家餐馆(如数据库),但 每家餐厅都有0地址,但在数据存储每家餐馆都有 最低2添加resses。
有没有人有同样的问题或知道解决方案?
答
的“渴望”加载如果有人有同样的问题:
更换
@Persistent(mappedBy = "restaurant")
List<RestaurantAddress> addresses = new
ArrayList<RestaurantAddress>
与
@Persistent(mappedBy = "restaurant",defaultFetchGroup = "true")
List<RestaurantAddress> addresses = new
ArrayList<RestaurantAddress>
另一种方法是否必须在关闭 PersistentManager前检索列表中的每个餐馆“touch”地址属性 。在PersistenManager关闭后,您不能从数据存储中检索任何东西,并且Restaurant不会为空。
解决方案在google-appengine-java用户的帮助下找到。
答
你确定地址没有被延迟加载吗?只是一个猜测...是有一些方法来强制对象
您是否有链接到与谷歌相关的此讨论? – pkaeding 2010-10-01 21:25:30