0

Je cette situation (détails en bas):Caching Collection chargée paresseux d'une relation chargée paresseuse d'ouverture de session en vue

  • X est une entité mise en veille prolongée
  • Xy est un lazy- référence chargé à Y, une autre entité mise en veille prolongée
  • Yz est chargé paresseux, collection mises en cache des entités mise en veille prolongée Z

dans un grain de printemps post-transaction, dans le cadre ouvert de session en vue, je suis accéder à Xyz et obtenir "org.hibernate.Hi bernateException: Impossible de résoudre le propriétaire de la collection de chargement [...] pour la mise en cache de second niveau ". Débogage dans Hibernate 4.3.8.Final Je trouve que X.y est paresseusement chargé en utilisant une session temporaire et n'est donc pas disponible dans le "original" StatefulPersistenceContext, où CollectionLoadContext le cherche.

Alors, est-ce que je fais quelque chose qui n'est pas fait? Ai-je besoin de déclencher explicitement ce chargement différé à l'avance ou de supprimer la mise en cache?

public class Teachable { 
    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "fk_org_element_sch", nullable = false) 
    protected ElementSch element; 
} 

public class ElementSch { 
    @OneToMany(targetEntity = ElementConnectionSch.class) 
    @JoinColumn(name = "fk_org_element_parent") 
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
    private Collection<ElementConnectionSch> childConnections; 
} 

public class ElementConnectionSch { 
    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name="fk_org_element_parent") 
    private ElementSch parent; 
} 

Après l'transacation a été commis, mais encore à l'intérieur ouvert de session en vue, j'appelle Teachable.getElement(). GetChildConnections() et obtenir le HibernateException. A partir du débogage, je peux voir ElementSch et ElementConnectionSch chargés paresseusement dans des sessions séparées, c'est-à-dire que la session principale a été chargée et que deux sessions temporaires distinctes sont utilisées pour ElementSch et ElementConnectionSch.

+0

Pouvez-vous également télécharger vos fichiers hbm? Aussi * récupère * la valeur de la propriété pour la collection X.y ?? –

Répondre

0

Cela a été identifié comme une question de notre part en raison de Mise en veille prolongée mise à niveau de version:

Nous utilisons Spring WebFlow et mettre des entités Hibernate dans des étendues d'écoulement. Pour que cela fonctionne correctement sur plusieurs appels au sein du flux, nous injectons des enveloppes de réassemblage aux entités et aux collections afin qu'elles récupèrent la session de l'appel en cours au lieu d'utiliser celle dans laquelle elles ont été créées, maintenant fermée. Avec la mise à niveau de la version, des modifications ont été apportées à la façon dont cette injection a été effectuée et, bien que fonctionnant, avant les mappages d'origine ont été chargés, c'est-à-dire que nous avons bouclé sur des itérateurs vides et n'avons rien injecté.