Spring Data Mongo - Abfrage von @DBRef Feld id
Ich bin neu in Spring Data Mongo also ich muss etwas falsch weil ich kann nicht verwalten, ausführen, wie eine einfache Abfrage. Dies ist mein Modell:
@Document(collection="brands")
public class Brand{
@Id
private int id;
private String name;
...
//getters-setters
}
@Document(collection="models")
public class Model{
@Id
private int id;
private String name;
@DBRef
private Brand brand;
...
//getters-setters
}
Ich würde gerne alle Modelle einer Marke, also implementiere ich die DAO wie folgt:
@Repository
public interface IModelDAO extends MongoRepository<Model, Integer>{
@Query(value="{ 'brand.$id' : ?0 }")
public List<Model> findByBrandId(Integer id);
}
Wenn ich diese ausführen mongodb-Abfrage in der shell funktioniert es: db.modelss.find({ 'brand.$id' : 1 })
Aber die Java-Anwendung löst folgende Ausnahme:
Caused by: java.lang.IllegalAccessError
at org.springframework.data.mapping.PropertyReferenceException.detectPotentialMatches(PropertyReferenceException.java:134)
Anscheinend ist es auf der Suche für ein Feld $id in Brand-Klasse, und da es nicht existiert, versagt er. Also habe ich die Abfrage ändern, um die folgenden, so dass Sie navigieren, um das id-Feld:
@Query(value="{ 'brand.id' : ?0 }")
Nun, es nicht eine exception werfen, aber nicht finden, alles, was in der DB ist.
Debuggen der MongoTemplate.executeFindMultiInternal () - Methode können sehen, dass in
DBCursor cursor = null;
try {
cursor = collectionCallback.doInCollection(getAndPrepareCollection(getDb(), collectionName));
cursor-Abfrage query={ "brand" : 134}
. Es macht also Sinn, es muss nicht alles finden. Die änderung der Abfrage den Wert während des Debuggens zu query={ "Marke.$id" : 134} es funktioniert.
Also, warum nicht die Abfrage korrekt übersetzt?
InformationsquelleAutor codependent | 2015-10-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem wurde verursacht durch die
@Id
int geben. Ändern Sie es zu Integer gelöst:InformationsquelleAutor codependent
versuchen Sie dieses;
InformationsquelleAutor Mohammad Badiuzzaman