J'essaie d'utiliser JBossCache en tant que fournisseur de cache de second niveau JPA/Hibernate pour mettre en cache les requêtes appelées à plusieurs reprises. Les requêtes retournent des entités d'un type spécifique, appelons-le FooType.Présentation de JBossCache - Mise en cache d'un graphique d'objets avec de nombreuses associations
FooType se présente comme suit:
@Entity(name = FooType)
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
public class FooType {
protected BarType barType;
@ManyToOne(targetEntity = BarType.class, cascade = {
CascadeType.ALL
})
BarType getBarType() {
return barType;
}
}
Ainsi, Footype a un grand nombre à une association. Maintenant, quand j'appelle la requête, seulement une très petite partie semble être mise dans le cache. Je pense que la raison en est que je n'ai pas marqué l'association avec le tag @Cache. Ai-je raison?
Mais la vraie question est la suivante:
Bartype a également une poignée d'associations, et ces objets de retour qui fournissent aussi des associations et ainsi de suite, la construction d'un grand graphique des associations. Maintenant, dois-je
a) annoter toutes les classes et
b) annoter aussi les associations
afin d'être mis en mémoire cache toute la requête?
Donc, si je fais l'objet requête cacheable, je ne ai pas besoin de faire les entités Cacheable il retourne? – helpermethod
Le problème est que la requête inital est mise en cache mais Hibernate crée également un géant qui déclenche des requêtes supplémentaires qui suivent la requête inital. Ceux-ci ne sont pas mis en cache. – helpermethod
La requête doit pouvoir être mise en cache et les entités doivent être marquées avec @Cache. Je ne suis pas sûr de comprendre d'où proviennent ces requêtes supplémentaires. Sont-ils créés par vous? Ou en interne par Hibernate? Si elles sont internes, vous ne pouvez rien faire à ce sujet AFAIK. –