2010-06-01 7 views
1

Est-ce que JDO peut récupérer tous les enfants d'un modèle de base de données en même temps?Chargement rapide des enfants avec JDO (Datanucleus)

Comme:

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

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

Dans mon cas, j'ai un grand nombre de parents que je Fetch à la fois. Accéder à leurs enfants prend alors beaucoup de temps car ils sont récupérés paresseusement.

JDO (Datanucleus) prend-il en charge leur extraction en même temps, en accord avec les parents? J'ai également essayé de récupérer tous les enfants indépendamment avec une autre requête et de les mettre dans le cache Level2 par la suite, mais ils sont quand même récupérés (peut-être que jdo ne connait pas leur relation? Parce que le ForeignKey n'a pas t été récupéré au début?)

Des idées comment lire la structure de données plus rapidement?

Cheers,

Jan

Répondre

3

utilisent Fetch Groups vous? Vos classes enfant ne sont probablement pas dans le groupe de récupération par défaut.

Lorsqu'un objet est récupéré à partir du datastore par JDO généralement pas tous les champs sont récupérés immédiatement. Cette est parce que pour des raisons d'efficacité seuls types de champs particuliers sont récupéré dans l'accès initial de l'objet , et ensuite tous les autres objets sont récupéré lors de l'accès (loading paresseux). Le groupe de champs qui sont chargés est appelé un groupe chercher

+0

J'utilise FetchGroups mais pour autant que je unserstood ils ne contrôle pas ce qui est tiré par les cheveux à la fois, mais seulement ce qui est (par exemple) détaché. Êtes-vous d'accord? Je ne veux pas détacher les objets. Je n'en ai pas besoin dans le cas particulier ci-dessus. (De plus, le détachement ne récupère pas tous les enfants d'une collection en même temps) – Jan

+0

Récupérer des plans s'applique à la fois à attacher/détacher * ET * ce qui est récupéré en même temps. une autre citation de la même page que j'ai liée à: "Le FetchPlan s'applique non seulement aux appels à PersistenceManager.getObjectById(), mais aussi à PersistenceManager.newQuery(), PersistenceManager.getExtent(), PersistenceManager.detachCopy et bien plus encore." –

Questions connexes