Spring-Data Mongo中的Query-Annotation用于搜索Map的键/值

时间:2014-10-03 12:14:02

标签: java spring spring-data spring-data-mongodb

我有一个包含key / value-Map的实体,我希望将它与Spring-Data Mongo一起使用。 持久性很容易。现在我想在这个地图上实现一个非常动态的查询,其中查询的KEY也应该被参数化(或者它的一部分):

public interface EntityItemRepository extends MongoRepository<EntityItem, String>{

@Query("{values.?0:?1}")
public List<EntityItem> findByValues(String key,String value);

....

这样我就可以轻松做到了

findByValues('lastname','Schneider');

这是我的实体:

public class EntityItem {

@Id
private String id;

private Map<String, Object> values = new HashMap<String, Object>();

...

我通过StringBasedMongoQuery调试并发现,只有值(所以“?1”)被绑定,而不是查询的键(“?0”)。我对StringBasedMongoQuery进行了一些更改,现在它可以正常工作......但我想知道是否有比黑客攻击我自己的StringBasedMongoQuery更好的解决方案:)

在org.springframework.data.mongodb.repository.query.StringBasedMongoQuery我改变了(#262):

    for (String field : dbo.keySet()) {
        collectParameterReferencesIntoBindings(bindings, dbo.get(field));
    }

    for (String field : dbo.keySet()) {
        collectParameterReferencesIntoBindings(bindings, field);
        collectParameterReferencesIntoBindings(bindings, dbo.get(field));
    }

并添加了一些讨厌的引用字符串替换...正如我现在所说的那样有效,但这一切都感觉不对。

我希望这没有重复,我搜索了几个小时,但没有找到任何问题。

0 个答案:

没有答案