¿Cómo puedo eliminar un elemento de una Hashmap en Hibernate?
Pregunta
Trato de eliminar un elemento de un mapa hash con hibernación.
Aquí está mi config en la colección:
@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;
}
y aquí está mi función Remove en el mismo objeto:
@Transactional
public void removeCharacteristic(Characteristic charact)
{
// getCharacteristics().size();
getCharacteristics().remove(charact.getShortcut());
}
Uso de la removeCharacteristic no elimine el artículo en la base de datos. Si yo elimine la línea para obtener el tamaño de la lista (que forzar la carga de la colección), el registro se borra así.
¿Cuál es el problema? ¿cómo puedo lograrlo sin forzar la carga de toda la colección?
EDIT: Sustituyo el mapa con una lista, y funciona como un encanto (sin cargarla previamente por la función size ()) ... Esto es muy extraño ... Así que mi problema se resuelve con la lista, pero tengo curiosidad a saber por qué no se ejecuta?
Solución 3
Este fue un error de hibernación, esto ha sido arreglado en la versión nueva
Otros consejos
Trate de establecer explícitamente la colección. por ejemplo.
c = getCharacteristics();
c.remove(...);
setCharacteristics(c);
Dado que usted ha dicho que funciona cuando se utiliza una lista lugar, es posible que usted está incorrectamente utilizando la función .Remove () del mapa?
La función .Remove () en un mapa toma la clave del objeto que desea eliminar, no el objeto real .
myMap.remove(MyObject.getKey()); //Or however you would get the key
La función .Remove () de una lista toma el objeto que desea eliminar;
myList.remove(MyObject);
Editar: veo que usted ha dicho que si se elimina el comentario de que una línea, funciona correctamente, por lo que esta muy probablemente no se aplica.