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.
das ist mein Problem löst. Vielen Dank. – matrix
Nur verrückt geworden! –
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