2015-10-22 19 views
6

Ich verwende Spring-Data-Mongodb 1.8.0; MongoDB 3.0.6; mongo-java-driver 3.1.0; feder-framework.version 4.0.3.Spring Data MongoDB fehlgeschlagen mit "in" Abfrage

Ich möchte eine Liste von user mit bestimmten Telefonnummern abfragen. Beispiel für Benutzer: { "_id" : ObjectId("5625e5c32e1ca013a03f0d1b"), "phone" : "12345535"}

In Mongo Shell db.user.find({phone: { $in: [ "12345535", "123535"]}}) funktioniert gut. Aber im Frühling habe ich versagt. Benutzer Java-Klasse (mit Getter/Setter weggelassen):

@Document(collection = "user") 
public class User { 
    @Id 
    String id; 
    String phone; 
} 

Was ich ist versucht:

Query q = new Query(Criteria.where("phone").in("12345535","123535")); 
mongoTemplate.find(q, User.class); 

Es kommt zum Fehler:

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) 

Aber mit wechselnden Feld Telefon zu id, funktioniert der gleiche Code gut.

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

Mit Debugging, finde ich, dass es auch nicht auf die Anforderungsphase ging, aufgetretene Fehler in der Abfrage-Aufbau Phase. Es scheint $in kann nicht von PropertyPath.create verarbeitet werden, während in dem id Fall kann es.

Wie kann ich das beheben? Ich bin ein Neuling und habe viel gesucht, habe aber kein Glück. Kannst du mir bitte helfen? Jede Antwort wird geschätzt. Danke Leute.

Antwort

11

Wie in den announcement blog angezeigt und die release train wiki, Spring Data MongoDB 1.8 erfordert Frühling 4.1, ideal 4.1.8, die eine wichtige Sicherheitskorrektur enthält.

+0

das ist mein Problem löst. Vielen Dank. – matrix

+0

Nur verrückt geworden! –

+2

Frühling 4.1.5 hat immer noch das gleiche Problem mit MongoDB 1.8.1, ABER der Wechsel zu Spring 4.1.8 funktioniert für mich. (Frühling 4.1.8.RELEASE + Spring MongoDB 1.8.1) – Gat

0

Das Problem habe auf mir erschienen, während Frühling 4.2.3.RELEASE und Spring MongoDB mit 1.6.1

Umschalten auf Frühling mongoDB 1.8.1 löst das Problem.

(als Kommentar Meant to @ OliverGierke Antwort, aber konnte es nicht tun, aufgrund der niedrigen Rufs.)

+1

Wenn Sie nicht genug Ruf haben um zu kommentieren, warte bis du es tust. Für weitere Informationen empfehle ich Ihnen, dies zu lesen: http://meta.stackexchange.com/q/214173/349538 –

+0

Danke für die Info! –

Verwandte Themen