我想从嵌入式地图中删除条目。如果删除了对象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
例外而失败。
有人可以帮我吗?
答案 0 :(得分:0)
标签不是实体。
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();