Как я могу удалить элемент из Hashmap в режиме гибернации?

StackOverflow https://stackoverflow.com/questions/1902256

Вопрос

Я пытаюсь удалить элемент из хэш-карты с помощью hibernate.

Вот мой конфиг в коллекции:

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

и вот моя функция удаления для того же объекта:

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

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

Используя removeCharacteristic, не удаляйте элемент в базе данных.Если я раскомментирую строку, чтобы получить размер списка (который принудительно загружает коллекцию), запись будет удалена.

В чем же проблема ?как я могу добиться этого, не форсируя загрузку всей коллекции?

Редактировать:Я заменяю карту списком, и она запускается как шарм (без предварительной загрузки с помощью функции size ())...Это очень странно...Итак, моя проблема решена с помощью списка, но мне любопытно узнать, почему он не запускается?

Это было полезно?

Решение 3

Это была ошибка гибернации, теперь она исправлена в более новой версии

Другие советы

Попробуйте явно задать коллекцию.например

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

Поскольку вы сказали, что это работает, когда вы вместо этого используете список, возможно ли, что вы неправильно используете функцию .remove() карты?

Функция .remove() на карте берет КЛЮЧ от объекта вы хотите удалить, не настоящий объект.

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

Функция .remove() списка берет объект который вы хотите удалить;

myList.remove(MyObject); 

Редактировать:Я вижу, вы сказали, что если вы раскомментируете эту строку, она будет работать правильно, так что это, скорее всего, не применимо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top