2010-06-01 62 views
1

JDO能否一次抓取数据库模型的所有孩子?JDO(Datanucleus)幼儿抓取儿童

像:

class Parent { 
@Persistent(mappedBy="parent") 
private Set<Children> children; 
} 

class Children { 
@Persistent 
private Parent parent; 
@Persistent 
private String name; 
} 

在我的情况,我有大量的家长,我取一次的。接触他们的孩子然后需要很多时间,因为他们被懒惰地取来。

JDO(Datanucleus)是否支持他们一次取出,与父母交往?

我也尝试独立地获取所有的孩子与另一个查询,并将它们放入Level2缓存之后,但仍然被抓取(也许jdo不知道他们的关系?因为ForeignKey(父id)hasn'最初是否被取到?)

任何想法如何更快地读取数据结构?

干杯,

回答

3

是否使用Fetch Groups?您的子类可能不在默认提取组中。

当一个对象从数据存储 通过JDO通常检索不是所有 字段立即检索。这 是因为出于效率目的 仅特定字段类型是在 物体的初始访问检索 ,然后任何其他对象的访问(懒惰 加载)时检索 。加载的域名为 的域称为获取组

+0

我使用FetchGroups,但据我所知,它们不控制一次抓取的内容,而仅控制什么是(例如)分离。你同意吗?我不想分离物体。在上面的特例中我不需要它。 (另外,分离也不会立即获取集合的所有子项) – Jan 2010-06-02 12:02:42

+0

提取计划适用于附加/分离*和*一次获取的内容。另一个引用来自我链接到的页面:“FetchPlan不仅适用于调用PersistenceManager.getObjectById(),还适用于PersistenceManager.newQuery(),PersistenceManager.getExtent(),PersistenceManager.detachCopy等等。” – 2010-06-02 12:50:01