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