【问题标题】:One-to-Many relationship. Select objects from datastore一对多关系。从数据存储中选择对象
【发布时间】:2009-09-30 16:09:02
【问题描述】:

我省略了一些代码(包声明、导入、其他字段) 为了简短。 我这里有简单的一对多关系。 到现在为止它工作得很好。

@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 地址,但在数据存储中,每家餐厅都有 最少 2 个地址。

有没有人遇到同样的问题或知道解决方法?

【问题讨论】:

    标签: java google-app-engine groovy jdo


    【解决方案1】:

    您确定地址不是延迟加载的吗?只是一个猜测......有什么方法可以强制“急切”加载对象

    【讨论】:

      【解决方案2】:

      如果有人会遇到同样的问题:

      替换

      @Persistent(mappedBy = "restaurant")
       List<RestaurantAddress> addresses = new
      ArrayList<RestaurantAddress>
      

      @Persistent(mappedBy = "restaurant",defaultFetchGroup = "true")
       List<RestaurantAddress> addresses = new
      ArrayList<RestaurantAddress>
      

      另一种方法是你必须“触摸”地址属性 关闭前检索到的列表中的每家餐厅 持久管理器。 PersistenManager 关闭后,您不能 从数据存储中检索任何内容,Restaurant 保持为空。

      google-appengine-java 用户的帮助下找到了解决方案。

      【讨论】:

      • 您是否有来自 google 群组的与此相关的讨论的链接?
      猜你喜欢
      • 1970-01-01
      • 2014-08-18
      • 2023-03-16
      • 1970-01-01
      • 2020-12-15
      • 1970-01-01
      • 2014-04-09
      • 2017-01-24
      • 1970-01-01
      相关资源
      最近更新 更多