4

我的休眠实体中有以下属性:

@ElementCollection(targetClass = String.class, fetch = FetchType.EAGER)
@CollectionTable(name="FORMDATA", joinColumns = @JoinColumn(name="FORM_ID"))
private Map<String, String> formData;

我想使用休眠条件进行查询,我想将表单与给定的键值对匹配,如下所示:

criteria.add(Restrictions.like("formdata.key", "%"+value+"%").ignoreCase());

其中“键”和“值”通过方法参数传递。

任何人都知道这应该如何工作?对我来说,休眠文档对此并不清楚。

非常感谢,B。

4

1 回答 1

4

由于我自己也有同样的问题,所以我做了一些试验和错误,并提出了这个解决方案:

Criteria attr = crit.createCriteria("formdata");
attr.add(Restrictions.and(
            Restrictions.eq("indices", key), 
            Restrictions.eq("elements", "%" + value + "%")
));

“索引”和“元素”是集合的特殊属性,可用于访问映射的,呃,Map 的键和值。但显然仅在该属性的子标准中 - acrit.add(Restrictions.eq("formdata.indices", "foo"))不起作用。

我还没有找到一种方法来查询映射集合的多个元素。生成的 SQL 始终只生成到集合表的单个连接。

于 2013-07-10T11:22:01.817 回答