Hibernate:从嵌入式地图中删除HQL

时间:2013-02-16 10:28:06

标签: sql hibernate hql hibernate-4.x hql-delete

我想从嵌入式地图中删除条目。如果删除了对象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 = :tagProduct.tags is not mapped例外而失败。

有人可以帮我吗?

1 个答案:

答案 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();