Spring with MongoRepository:DBRef

时间:2016-05-27 17:43:23

标签: java spring mongodb annotations dbref

我正在尝试使用spring的dbref函数。

我的代码:

@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)实现。我想在我的Tour对象中引用pois作为列表。

我做了一个POST来将poi存储在我的pois集合中。

问题:当我使用poi对象的objectID-reference在我的巡演中进行POST时,我的poi List in tours始终为null。

我理解@DBRef是对的,不是吗?

Edit1:错误消息

问题是:假设您在数据库中有两个poi,引用了“poi_id_1”和“poi_id_2”。现在我开始对/ tour / add进行API调用,其中包含以下JSON数组(其他参数省略):
"poiList": [{"id": "poi_id_1"}, {"id":"poi_id_2"}]

我得到200.

但是:当我开始对游览进行查询时,我得到"poiList": [null]作为结果。 (省略其他论点)

提前感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

您不应该使用db中的@DBRef属性,因为您的POI位于同一个数据库中,并且您的域对象会推断出集合名称。

通过指定@DBRef(db="..."),您要求Spring Data在一个不同的数据库中查找条目

只需使用@DBref

即可