2

埋め込みマップからエントリを削除したい。オブジェクトCategoryTagが削除された場合、マップからエントリを削除するインターセプターで HQL クエリを実行したいと考えています。

'製品モデル:

@NotNull
@ElementCollection
@CollectionTable(name = "producttag", joinColumns=@JoinColumn(name="id"))
protected Map<CategoryTag, String> tags = new HashMap<CategoryTag, String>();

HQLクエリをどのように書くことができるか、私はちょっと空白です。削除クエリでマップを参照する方法がわからないという問題から始まります。delete Product.tags t where t.key = :tag例外で失敗しProduct.tags is not mappedます。

誰かがこれについて私を助けることができますか?

4

1 に答える 1

1

タグはエンティティではありません。

A delete operation only applies to entities of the specified class and its subclasses. It does not cascade to related entities.

これがエラーが発生する理由です。正しい方法は、エンティティをロードし、そのコレクションを更新してから、このオブジェクトを保存することです。

Product p = session.load(Product.class, id);
p.removeTags(tag);
session.flush();
于 2013-02-16T11:34:59.363 に答える