一对多关系。从数据存储中选择对象

问题描述:

为了简化,我省略了一些代码(包声明,导入,其他字段) 。 我这里有简单的一对多关系。 它工作得很好,直到这一刻。一对多关系。从数据存储中选择对象

@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用户的帮助下找到。

+0

您是否有链接到与谷歌相关的此讨论? – pkaeding 2010-10-01 21:25:30

你确定地址没有被延迟加载吗?只是一个猜测...是有一些方法来强制对象