Sto usando spring-data-mongodb 1.8.0; MongoDB 3.0.6; mongo-java-driver 3.1.0; spring-framework.version 4.0.3.Spring Data MongoDB non riuscito con la query "in"
Quello che voglio è richiedere un elenco di user
con determinati numeri di telefono. esempio per l'utente: { "_id" : ObjectId("5625e5c32e1ca013a03f0d1b"), "phone" : "12345535"}
In Mongo Shell db.user.find({phone: { $in: [ "12345535", "123535"]}})
funziona correttamente. Ma in primavera ho fallito. Java Class User (con getter/setter omesso):
@Document(collection = "user")
public class User {
@Id
String id;
String phone;
}
Quello che ho cercato è:
Query q = new Query(Criteria.where("phone").in("12345535","123535"));
mongoTemplate.find(q, User.class);
Si tratta di errore:
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)
Ma con il cambiamento di campo telefono a id, lo stesso codice funziona correttamente.
Query q = new Query(Criteria.where("id").in("5625e5c32e1ca013a03f0d1b","f0d1e"));
mongoTemplate.find(q, User.class);
con il debug, trovo che ancora non è andato alla fase di richiesta, si è verificato l'errore nella query-building fase di . Sembra che $in
non possa essere elaborato da PropertyPath.create
, mentre nel caso id
, può.
Come posso risolvere questo? Sono un principiante e ho cercato molto ma non ho avuto fortuna. Per favore, aiutatemi. Ogni risposta è apprezzata Grazie ragazzi.
questo risolve il mio problema. Grazie. – matrix
Appena impazzito! –
Spring 4.1.5 ha ancora lo stesso problema con MongoDB 1.8.1, ma il passaggio a Spring 4.1.8 funziona per me. (Spring 4.1.8.RELEASE + Spring MongoDB 1.8.1) – Gat