2016-05-27 2 views
0

J'essaie d'utiliser la fonction dbref du printemps.Spring avec MongoRepository: DBRef

Mon code:

@EnableAutoConfiguration 
@RestController 
@RequestMapping("/poi") 
public class PoiBasicController { 
    @Autowired 
    private PoiRepository poiRepository; 

    @RequestMapping(value = "/add", method = RequestMethod.POST) 
    public @ResponseBody ResponseEntity<String> add(@RequestBody PointOfInterest poi) { 

     poiRepository.insert(poi); 

     return ResponseEntity.status(HttpStatus.OK).body(null); 
    } 

@EnableAutoConfiguration 
@RestController 
@RequestMapping("/tour") 
public class TourController { 

    @Autowired 
    private TourRepository tourRepository; 

    @Autowired 
    private PoiRepository poiRepository; 

    @RequestMapping(value = "/add", method = RequestMethod.POST) 
    public @ResponseBody ResponseEntity<String> addTour(@RequestBody Tour tour) { 
     tourRepository.insert(tour); 
     return ResponseEntity.status(HttpStatus.OK).body(null); 
    } 

@Document 
public class Tour { 
    @Id 
    private String id; 
    private HashMap<String, String> title; 
    private HashMap<String, String> description; 
    private List<String> images; 
    @DBRef(db = "pois") 
    private List<PointOfInterest> poiList; 

@Document(collection = "pois") 
public abstract class PointOfInterest { 
    @Id 
    private String id; 

    private UpperCategory upperCategory; 
    private List<String> tags; 
    private int priority; 
    private List<String> images; 
    private LocationWrapper location; 
    /* 
     Languagekey, description 
    */ 
    private HashMap<String, String> description; 

La classe Poi est mis en œuvre par différents types de poi (par exemple la culture). Je veux référencer le pois dans mon objet Tour en tant que liste.

Je fais un POST pour stocker un poi dans ma collection pois. Le problème: Lorsque je fais un POST sur mon tour avec la référence objectID de l'objet poi, ma liste poi dans les tournées est toujours nulle.

J'ai bien compris le @DBRef, n'est-ce pas?

Edit1: message d'erreur

Le problème est: Supposons que vous avez deux points d'intérêt dans la base de données référencée avec « poi_id_1 » et « poi_id_2 ». Maintenant, je commence un appel API à/tour/ajouter au tableau JSON suivant il (autres arguments ommited):
"poiList": [{"id": "poi_id_1"}, {"id":"poi_id_2"}]

je reçois un 200

MAIS: Quand je commence une requête sur les visites, J'obtiens "poiList": [null] comme résultat. (D'autres arguments ommited)

Merci pour votre aide à l'avance :)

+0

Pouvez-vous dire ce qui est s'il vous plaît l'erreur? – Pavan

+0

Je ne vois aucune erreur dans la syntaxe de l'utilisation de @dbref. – Pavan

Répondre

0

Vous ne devriez pas utiliser la propriété db dans @DBRef comme résident de vos POI dans la même base de données et le nom de la collection est déduit de votre objet de domaine. En spécifiant @DBRef(db="..."), vous demandez à Spring Data de rechercher des entrées dans une base de données différente.

utiliser simplement @DBref

+0

J'ai ajouté mon message d'erreur ci-dessus – JavaSchnucki