Domanda

cerco di eliminare un elemento da una mappa hash con Hibernate.

Ecco il mio config sulla raccolta:

@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;
}

e qui è la mia funzione di rimozione sullo stesso oggetto:

@Transactional
public void removeCharacteristic(Characteristic charact)
{
    // getCharacteristics().size();

    getCharacteristics().remove(charact.getShortcut());
}

Uso della removeCharacteristic non eliminare l'oggetto nel database. Se io commento dalla riga per ottenere la dimensione della lista (che forza di carico della collezione), il record è ben cancellato.

Qual è il problema? come posso raggiungerlo senza forzare il carico di tutta la collezione?

EDIT: Sostituisco la mappa da un elenco, e funziona come un fascino (senza caricarlo in precedenza dalla funzione size ()) ... Questo è molto strano ... Quindi il mio problema è risolto con la lista, ma sono curioso di sapere il motivo per cui non funziona?

È stato utile?

Soluzione 3

Questo è stato un errore Hibernate, questo è stato corretto nella versione più recente

Altri suggerimenti

Prova esplicitamente l'impostazione della collezione. per es.

c = getCharacteristics();
c.remove(...);
setCharacteristics(c); 

Dato che lei ha detto che funziona quando si utilizza un elenco, invece, è possibile che si sta in modo errato utilizza la funzione .Rimuovere () della mappa?

La funzione .Rimuovere () su una mappa prende la chiave dell'oggetto che si desidera rimuovere, non l'oggetto vero e proprio .

myMap.remove(MyObject.getKey()); //Or however you would get the key

La funzione .Rimuovere () di un elenco prende l'oggetto che si desidera rimuovere;

myList.remove(MyObject); 

Modifica: vedo che lei ha detto che, se si rimuove il commento che una linea, funziona correttamente, quindi questo molto probabilmente non si applica.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top