Hibernate でハッシュマップから項目を削除するにはどうすればよいですか?

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 を使用しても、データベース内の項目は削除されません。リストのサイズを取得するために行のコメントを解除すると (コレクションの読み込みが強制されます)、レコードは完全に削除されます。

何が問題ですか ?コレクション全体の負荷を強制せずにそれを実現するにはどうすればよいですか?

編集:マップを List に置き換えると、まるで魔法のように実行されます (size() 関数によって事前にロードする必要はありません)。これはとても奇妙です...したがって、私の問題はリストで解決されましたが、なぜそれが実行されないのか知りたいのです。

役に立ちましたか?

解決 3

この休止状態のバグだった、これは現在、

新しいバージョンで修正されています

他のヒント

コレクションを設定し、明示的に試してみてください。 例えばます。

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

代わりにリストを使用すると機能するとのことですが、マップの .remove() 関数を誤って使用している可能性はありますか?

マップ上の .remove() 関数 オブジェクトのKEYを取得します 削除したい、 実際のオブジェクトではありません.

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

リストの .remove() 関数 オブジェクトを受け取ります 削除したいもの;

myList.remove(MyObject); 

編集:その 1 行のコメントを解除すると正しく動作するとのことですが、これは当てはまらない可能性が高いです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top