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

Schreibe einen Kommentar