Printemps de Données Mongo - Comment interroger par @DBRef du champ id

Je suis nouveau sur le Printemps de Données Mongo donc, je dois être en train de faire quelque chose de mal parce que je n'arrive pas à exécuter une requête simple. C'est mon modèle:

@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
}

Je voudrais obtenir tous les modèles de la marque, j'ai donc mettre en œuvre les DAO comme suit:

@Repository
public interface IModelDAO extends MongoRepository<Model, Integer>{
    @Query(value="{ 'brand.$id' : ?0 }")
    public List<Model> findByBrandId(Integer id);   
}

Si j'exécute ce mongodb requête dans le shell dans lequel il travaille: db.modelss.find({ 'brand.$id' : 1 })

Mais, l'application Java jette l'exception suivante:

Caused by: java.lang.IllegalAccessError
at org.springframework.data.mapping.PropertyReferenceException.detectPotentialMatches(PropertyReferenceException.java:134)

Apparemment, il est à la recherche d'un champ $id dans la Marque de la classe, et comme il n'existe pas, il échoue. J'ai donc modifier la requête à la suite, de sorte qu'il navigue vers le champ id:

@Query(value="{ 'brand.id' : ?0 }")

Maintenant, il ne jette pas une exception, mais il n'a rien trouvé dans la DB.

Débogage de l'MongoTemplate.executeFindMultiInternal() la méthode peut voir que dans

DBCursor cursor = null;
    try {
        cursor = collectionCallback.doInCollection(getAndPrepareCollection(getDb(), collectionName));

curseur de la requête est query={ "brand" : 134}. Il est donc logique de ne pas trouver quoi que ce soit. La modification de la valeur de la requête au cours de débogage pour query={ "marque".$id" : 134} cela fonctionne.

Alors, pourquoi n'est-ce pas correctement la requête traduite?

OriginalL'auteur codependent | 2015-10-19