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.

这就是您收到错误的原因。正确的方法是加载Entity,更新它的集合,然后保存这个对象。

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