J'essaie de supprimer un élément d'une carte de hachage avec mise en veille prolongée.Comment puis-je supprimer un élément d'une Hashmap dans Hibernate?
Voici ma config sur la collection:
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@OneToMany(mappedBy = "game", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@Where(clause = "charactType='charact'")
@MapKey(name = "shortcut")
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
public Map<String, Characteristic> getCharacteristics()
{
return characteristics;
}
public void setCharacteristics(Map<String, Characteristic> characteristics)
{
this.characteristics = characteristics;
}
et voici ma fonction de suppression sur le même objet:
@Transactional
public void removeCharacteristic(Characteristic charact)
{
// getCharacteristics().size();
getCharacteristics().remove(charact.getShortcut());
}
Utilisation de la removeCharacteristic ne supprime pas l'élément dans la base de données. Si je décommente la ligne pour obtenir la taille de la liste (qui force le chargement de la collection), l'enregistrement est bien supprimé.
Quel est le problème? comment puis-je y parvenir sans forcer la charge de toute la collection? Je remplace la carte par une liste, et il fonctionne comme un charme (sans le charger auparavant par la fonction size()) ... C'est très étrange ... Donc mon problème est résolu avec le liste, mais je suis curieux de savoir pourquoi il ne fonctionne pas?
Votre transaction est bien engagée (et la session rincée)? –
Je pense que oui parce que si elle n'était pas rincée, la ligne non commentée ne ferait rien. –
Pourriez-vous activer la journalisation de votre gestionnaire de transactions et mettre en veille prolongée pour voir que la configuration est correcte? –