Spring Data MongoDB "in" 查询失败

6
我正在使用spring-data-mongodb 1.8.0; MongoDB 3.0.6; mongo-java-driver 3.1.0; spring-framework.version 4.0.3。
我想要的是查询一组带有某些电话号码的user。例如一个user: { "_id" : ObjectId("5625e5c32e1ca013a03f0d1b"), "phone" : "12345535"} 在Mongo Shell中,db.user.find({phone: { $in: [ "12345535", "123535"]}})可以正常工作。但是在Spring中,我失败了。Java类User(省略了getter/setter):
@Document(collection = "user")
public class User {
    @Id
    String id;
    String phone;
}

我尝试的方法是:
Query q = new Query(Criteria.where("phone").in("12345535","123535"));
mongoTemplate.find(q, User.class);

出现错误:

出现了错误:

Exception in thread "main" java.lang.IllegalAccessError: tried to access class org.springframework.beans.PropertyMatches from class org.springframework.data.mapping.PropertyReferenceException
    at org.springframework.data.mapping.PropertyReferenceException.detectPotentialMatches(PropertyReferenceException.java:134)
    at org.springframework.data.mapping.PropertyReferenceException.<init>(PropertyReferenceException.java:59)
    at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:75)
    at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:327)
    at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:307)
    at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:270)
    at org.springframework.data.mongodb.core.convert.QueryMapper$MetadataBackedField.getPath(QueryMapper.java:837)
    at org.springframework.data.mongodb.core.convert.QueryMapper$MetadataBackedField.<init>(QueryMapper.java:729)
    at org.springframework.data.mongodb.core.convert.QueryMapper$MetadataBackedField.with(QueryMapper.java:740)
    at org.springframework.data.mongodb.core.convert.QueryMapper$MetadataBackedField.with(QueryMapper.java:686)
    at org.springframework.data.mongodb.core.convert.QueryMapper.getMappedKeyword(QueryMapper.java:258)
    at org.springframework.data.mongodb.core.convert.QueryMapper.getMappedObjectForField(QueryMapper.java:200)
    at org.springframework.data.mongodb.core.convert.QueryMapper.getMappedObject(QueryMapper.java:123)
    at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1700)
    at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1690)
    at org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:602)
    at org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:593)
    at com.example.TestMongo.main(TestMongo.java:30)

但是,将字段phone更改为id后,相同的代码可以正常工作。

Query q = new Query(Criteria.where("id").in("5625e5c32e1ca013a03f0d1b","f0d1e"));
mongoTemplate.find(q, User.class);

通过调试,我发现它甚至没有进入请求阶段,在查询构建阶段出现了错误。看起来$in无法通过PropertyPath.create进行处理,而在id情况下,它可以。

我该如何解决?作为一名新手,我已经搜索了很多但没有运气。你能帮我吗?任何答案都将受到赞赏。谢谢大家。

2个回答

11

2
Spring 4.1.5仍然存在与MongoDB 1.8.1相同的问题,但是切换到Spring 4.1.8对我有效。(Spring 4.1.8.RELEASE + Spring MongoDB 1.8.1) - Gat
谢谢,将Spring切换到4.2.3.RELEASE和Spring Data MongoDB切换到1.8.1.RELEASE对我很有效 :) - Arpit Aggarwal

0

我在使用Spring 4.2.3.RELEASE和Spring MongoDB 1.6.1时遇到了问题。

切换到Spring mongoDB 1.8.1解决了这个问题。

(本意是作为对@OliverGierke答案的评论,但由于声望等级较低而无法发表。)


1
如果您没有足够的声望来发表评论,请等待直到您有足够的声望。如需更多信息,建议您阅读此链接:http://meta.stackexchange.com/q/214173/349538 - Donald Duck
谢谢提供信息! - P. Iakovakis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接