Je suis un peu nouveau à hiberner et j'essaie d'implémenter la mise en cache de second niveau en utilisant ehCache. Je rencontre un problème en essayant d'utiliser le cache L2 pour récupérer une association many-to-one. La cartographie de l'association dans mon fichier foo.hbm.xml ressemble:Hibernate L2 Mise en cache pour les associations plusieurs-à-un
<hibernate-mapping>
<class name="com.test.Foo" table="FOO" >
<id name="id" type="long">
<column name="FOO_ID" precision="11" scale="0" />
<generator class="assigned" />
</id>
<many-to-one name="bar" class="com.test.Bar" >
<cache usage="read-only" />
<column name="BAR_TY" not-null="true" />
<column name="BAR_VAL" length="4" not-null="true" />
</many-to-one>
</class>
</hibernate-mapping>
(Ceci est très raccourci/version modifiée de mon fichier hbm.xml réel, je l'espère pas de fautes)
Notez que Je ne cache que "bar", pas "foo". Cependant, lorsque j'exécute un test unitaire avec ce mappage, j'obtiens l'erreur suivante:
SEVERE: Erreur d'analyse XML: XML InputStream (40) Le contenu du type d'élément "many-to-one" doit correspondre à "(meta *, (colonne | formule) *) ".
Lorsque je le retire, cela fonctionne très bien, mais pas de mise en cache L2. Est-ce simplement que la relation many-to-one ne supporte pas la mise en cache? Et si oui, des suggestions sur la façon de contourner cela?
FYI J'ai un autre test unitaire qui lit directement "bar" (ie pas par association) et ça fonctionne correctement - la 2ème fois que je reçois une "barre" il l'obtient du cache L2, donc je suis assez J'ai confiance que le reste de la configuration est fait correctement. Et désolé, encore à l'âge de pierre au travail donc pas annotations etc.