J'essaie de mettre en cache un objet dans le cache de second niveau de Hibernate qui a un ID composite mappé dans mon fichier de mappage de persistance. Les journaux indiquent que la première fois que j'exécute la requête, la classe est mappée lorsque l'ID composite est placé dans le cache. Toutefois, lorsque je réexécute la requête, l'objet n'est pas extrait du cache. Il exécute à nouveau la requête à nouveau.Cache-Hibernate cache-id de second niveau
Est-ce que Hibernate a un problème avec les ID composites de mise en cache de second niveau?
Infodesks:
- utilisant Hibernate 3.1, ehcache 2.4.2
- classe ID Composite implémente sérialisable
- J'utilise une nouvelle session de mise en veille prolongée lors de l'exécution de la requête une deuxième fois
- I J'utilise hibernateTemplate.load (Class, ID) pour récupérer l'objet
Voici comment je construis mon I D et exécuter ma requête:
CompositeId id = new CompositeId(date, sessionId);
UserDetails user = (UserDetails) hibernateTemplate.load(UserDetails.class, id);
Et voici comment mon dossier persistance mapping définit ci-dessus:
<class name="com.entities.UserDetails"
table="USER_DETAILS"
lazy="false">
<cache usage="read-write"/>
<composite-id name="userId" class="com.entities.CompositeId" unsaved-value="undefined">
<key-property name="userSessionId" column="SESSION_ID" />
<key-property name="dateCreated" column="DATE_CREATED" type="date" />
</composite-id>
EDIT: L'intrigue épaissit ....
Quand j'ai changé cette à la politique de cache en lecture seule, cela a bien fonctionné. Le comportement du cache transactionnel semble extrêmement imprévisible. Quelqu'un peut-il expliquer pourquoi ce qui précède est arrivé avec un cache en lecture-écriture, mais a bien fonctionné en lecture seule? Cette table n'est pas mise à jour, donc je ne sais pas pourquoi la sémantique transactionnelle changerait les choses dans cette instance.
Votre classe d'ID composite a-t-elle correctement implémenté 'equals()'/'hashCode()'? – axtavt
Oui, désolé, j'aurais dû ajouter cela aussi. Il implémente les deux. – sma
L'identificateur composite et l'entité Serializable sont-ils tous les deux? – Augusto