Весна с MongoRepository: DBRef

Я пытаюсь использовать функцию dbref от spring.

мой код:

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

Класс Poi реализуется различными типами poi (например, Culture). Я хочу сослаться на POI в моем объекте тура как на список.

Я делаю сообщение, чтобы сохранить poi в моей коллекции POI.

Проблема: когда я делаю пост в моем туре с objectID-ссылкой объекта poi, мой список poi в туре всегда пуст.

Я правильно понял @DBRef, не так ли?

Edit1: сообщение об ошибке

Проблема: Предположим, у вас есть два POI в базе данных, на которую ссылаются «poi_id_1» и «poi_id_2». Теперь я запускаю вызов API к /tour / add со следующим массивом JSON в нем (другие аргументы ommited):
"poiList": [{"id": "poi_id_1"}, {"id":"poi_id_2"}]

Я получаю 200.

Но: когда я начинаю запрос на туры, я получаю "poiList": [null]результат. (другие аргументы ommited)

Заранее спасибо за помощь 🙂

1 ответ

  1. Не следует использовать dbсвойство in@DBRef, так как POI находятся в одной базе данных, а имя коллекции выводится из объекта домена.

    Указывая@DBRef(db="..."), вы просите Spring Data искать записи в другой базе данных.

    Просто использовать @DBref