我的hibernate实体中有以下属性:
@ElementCollection(targetClass = String.class, fetch = FetchType.EAGER)
@CollectionTable(name="FORMDATA", joinColumns = @JoinColumn(name="FORM_ID"))
private Map<String, String> formData;
我想用hibernate Criteria进行查询,我希望将表单与给定的键值对匹配,如下所示:
criteria.add(Restrictions.like("formdata.key", "%"+value+"%").ignoreCase());
其中'key'和'value'通过方法参数传递。
任何人都知道这应该如何运作?对我来说,hibernate文档对此并不清楚。
非常感谢, 乙
答案 0 :(得分:3)
由于我自己也有同样的问题,我做了一些试验和错误,并提出了这个解决方案:
Criteria attr = crit.createCriteria("formdata");
attr.add(Restrictions.and(
Restrictions.eq("indices", key),
Restrictions.eq("elements", "%" + value + "%")
));
“indices”和“elements”是集合的特殊属性,可用于访问映射的键和值,即呃Map。但显然只有该属性的子标准 - crit.add(Restrictions.eq("formdata.indices", "foo"))
不起作用。
我还没有找到一种方法来查询映射集合的多个元素。生成的SQL始终只生成集合表的单个连接。