2015-10-22 22 views
6

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.

risposta

11

Come indicato nello announcement blog e nello release train wiki, Spring Data MongoDB 1.8 richiede Spring 4.1, idealmente 4.1.8 che include un'importante correzione di sicurezza.

+0

questo risolve il mio problema. Grazie. – matrix

+0

Appena impazzito! –

+2

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

0

Il problema sono apparsi su di me durante l'utilizzo di primavera e la primavera 4.2.3.RELEASE MongoDB 1.6.1

Il passaggio alla primavera MongoDB 1.8.1 risolve il problema.

(inteso come un commento a @ di OliverGierke risposta, ma non poteva farlo, a causa di livello di reputazione basso.)

+1

Se non si ha abbastanza reputazione per commentare, aspetta finché non lo fai. Per ulteriori informazioni, ti suggerisco di leggere questo: http://meta.stackexchange.com/q/214173/349538 –

+0

Grazie per le informazioni! –

Problemi correlati