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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top