如何自动获取JDO嵌套的实体集合?

时间:2011-07-10 21:41:20

标签: google-app-engine google-cloud-datastore jdo

可能是一个非常微不足道的问题。

我有一个看起来像这样的对象:

@PersistenceCapable  
public class Parent {

  @PrimaryKey
  @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  private String _id;

  @Persistent
  private List<Child> _children;

   //...   
}

...嵌套实体看起来像这样(我被迫将主键声明为Key,否则它将不会持久存在):

@PersistenceCapable  
public class Child {

   @PrimaryKey
   @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
   private Key _id; 

   @Persistent
   private String _whatever;

   //... 
}

当我持久化时,所有内容都会保持正常(包括子实体),但我想通过获取父对象(例如getObjectById)来获取所有内容,但该集合将返回为null。

Owned One-to-Many Relationships似乎是我正在寻找的 - 但我很难看到它如何帮助我用填充的子实体集合取回父对象。

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:4)

@Persistent(defaultFetchGroup =“true”) 诀窍,你是对的。

_children属性的内容仅在您第一次访问它时(在pm.close!之前)加载。它被称为延迟加载。如果您希望默认情况下直接加载子实体或子实体集合,请应用上述“技巧”。

在我的应用程序中,如果是子实体集合,它会在开发服务器上生成错误消息(数据存储区不支持连接..),但是您可以忽略这个错误的错误,它在Dev中工作正常生产环境。

请注意,通过它的父实体获取集合每个子实体需要花费1个数据存储空间。

答案 1 :(得分:1)

这似乎可以解决问题:

@Persistent(defaultFetchGroup = "true")