2010-06-01 2 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) их выборку одновременно с родителями?

Я также попытался забрать всех детей независимо от другого запроса и затем поместить их в кэш уровня 2, но все же они извлечены (возможно, jdo не знает об их отношениях? Поскольку ForeignKey (parent-id) hasn ' t были взяты сначала?)

Любые идеи, как быстрее читать структуру данных?

Приветствия,

Jan

ответ

3

Вы используете Fetch Groups? Классы вашего ребенка, вероятно, не входят в группу выборки по умолчанию.

Когда объект извлекаются из датастора с помощью JDO, как правило, не все поля немедленно восстановлены. Это происходит потому, что в целях повышения эффективности только определенных типов полого извлеченного в начальном доступе к объекта, а затем любые другие объекты извлеченным при доступе (ленивой нагрузки). Группа полей, которые нагруженный называется выборки группу

+0

Я использую FetchGroups, но, насколько я unserstood они не контролируют то, что извлекается сразу, а только то, что есть (например) отдельно. Вы согласны? Я не хочу отсоединять объекты. Мне это не нужно в специальном случае выше. (Кроме того, отсоединение также не отображает всех детей коллекции одновременно). – Jan

+0

. Планы Fetch применяются как к подключению, так и к отсоединению * AND *, который извлекается сразу. другая цитата с той же страницы, к которой я привязан: «FetchPlan применяется не только к вызовам PersistenceManager.getObjectById(), но также к PersistenceManager.newQuery(), PersistenceManager.getExtent(), PersistenceManager.detachCopy и многим другим». –

Смежные вопросы