Frage

Ich versuche, ein Element aus einer Hash-Karte mit Hibernate zu löschen.

Hier ist meine Config auf der Sammlung:

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

und hier ist meine Funktion remove auf demselben Objekt:

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

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

Mit dem removeCharacteristic nicht das Produkt in der Datenbank löschen. Wenn ich die Linie zu bekommen, die Größe der Liste (die Kraftbelastung der Sammlung) Kommentar-, wird der Datensatz gelöscht.

Was ist das Problem? wie kann ich es erreichen, ohne die Last der gesamten Sammlung zu zwingen?

EDIT: Ich ersetze die Karte durch eine List, und es läuft wie ein Zauber (ohne es vorher durch die Größe () Funktion zu Laden) ... Das ist sehr seltsam ... Also mein Problem mit der Liste gelöst ist, aber ich bin neugierig zu wissen, warum es nicht ausgeführt wird?

War es hilfreich?

Lösung 3

Dies war ein Hibernate-Bug, wird diese nun in neuerer Version behebt

Andere Tipps

Versuchen Sie, explizit die Sammlung. z.

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

Da Sie sagte, dass es funktioniert, wenn Sie eine Liste stattdessen verwenden, ist es möglich, dass Sie falsch die .remove () Funktion der Karte verwenden?

Die .remove () Funktion auf einer Karte nimmt den Schlüssel des Objekts Sie entfernen möchten, nicht das eigentliche Objekt .

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

Die .remove () Funktion einer Liste nimmt das Objekt , die Sie entfernen möchten;

myList.remove(MyObject); 

Edit: Ich sehe, dass Sie gesagt haben, dass, wenn Sie uncomment dass eine Zeile, es funktioniert einwandfrei, so dass dies höchstwahrscheinlich keine Anwendung findet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top