2009-11-02 9 views
0

J'ai une entité A qui a une clé étrangère de l'entité B:Mappage de clé étrangère Hibernate?

entity A --> id, entity_a_name, foreign_key_entity_B 

Quand j'appelle

return session.createCriteria(EntityA.class).list(); 

-je obtenir la propriété de l'entité A l'intérieur entityB ainsi. Comment puis-je faire une charge paresseuse afin de ne pas charger enityB si ce n'est pas nécessaire?

Répondre

1

Il n'est pas clair à partir de votre description de quel type de relation vous parlez, mais s'il s'agit d'une relation un à un ou d'un à un, les choses ne sont pas si simples. Si A.entityB est nullable (non facultatif), Hibernate est forcé de charger la relation avec impatience afin de voir si la propriété est nulle. Seulement en marquant la relation comme non-optionnelle (dans ce cas Hibernate suppose que ce n'est pas nul puisqu'il s'agit d'une erreur sinon) pouvez-vous le faire charger paresseusement.

1
  • @LazyCollection: définit l'option sur lazyness @ManyToMany et associations @OneToMany. LazyCollectionOption peut être TRUE (la collection est paresseux et sera chargé lorsque son état est accédé), EXTRA (la collection est paresseux et toutes les opérations essayer de éviter le chargement de collecte, ce est particulièrement utile pour les énormes collections lors du chargement de tous les éléments n'est pas nécessaire) et FAUX (association pas paresseux)

  • @Fetch: définit la stratégie de récupération utilisée pour charger l'association . FetchMode peut être SELECT (un select est déclenché lorsque l'association doit être chargé), SUBSELECT (disponible uniquement pour collections, utilisez une stratégie subselect - s'il vous plaît se référer à la Mise en veille prolongée Documentation de référence pour plus d'informations) ou JOIN (utilisez un SQL JOIN pour charger l'association pendant le chargement de l'entité propriétaire). JOIN remplace tout attribut paresseux (une association chargée via une stratégie JOIN ne peut pas être paresseuse).