使用Morphia过滤HashMap

时间:2014-08-06 17:25:43

标签: mongodb hashmap morphia

我的实体包含此字段:

@Embedded
public Map<String, Integer> map;

在我想要对此地图进行过滤的查询中,所有元素必须具有与参数中传递的地图相同的键/值。

我按建议here尝试了这个:

for (Entry<String, Integer> e : myMap.entrySet()) {
    query.filter("map." + e.getKey(), e.getValue());
}

它正在工作,但我有警告,我不喜欢它:

[warn] o.m.m.q.QueryValidator - The type(s) for the query/update may be inconsistent; using an instance of type 'java.lang.Integer' for the field 'models.MyModel.map' which is declared as 'java.util.Map'
[warn] o.m.m.q.QueryValidator - Validation warnings: 
[Validation failed: 'Type java.util.Map may not be queryable with value '2' with class java.lang.Integer']

所以我正在寻找另一种方法来做到这一点。我尝试了所有这些,但都没有工作:

query.field("map").equal(myMap);
query.filter("map", myMap);
query.field("map").hasAllOf(myMap.entrySet());
query.field("map").hasAllOf(myMap.keySet());

是地图订购还是别的问题?有任何想法吗 ? 感谢。

1 个答案:

答案 0 :(得分:4)

这是morphia:https://github.com/mongodb/morphia/issues/641中的错误。您需要在Query实例上禁用验证:query.disableValidation();

他们的分析是:&#34;这听起来不正确,虽然查询验证失败应该只是在日志中,而不是抛出异常,所以这不应该是一个显示阻止。&#34;截至我回答的时候,他们已经在&#34; 1.0后&#34;里程碑。