我有一个包含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));
}
并添加了一些讨厌的引用字符串替换...正如我现在所说的那样有效,但这一切都感觉不对。
我希望这没有重复,我搜索了几个小时,但没有找到任何问题。