我正在尝试使用 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 (例如文化)实现。我想将我的 Tour 对象中的 pois 作为列表引用。
我做一个 POST 来在我的 pois 集合中存储一个 poi。
问题:当我使用 poi 对象的 objectID 引用在巡回演出中执行 POST 时,我在巡回演出中的 poi 列表始终为空。
我理解@DBRef对了,不是吗?
编辑1:错误消息
问题是:假设数据库中有两个 poi,引用了 "poi_id_1" 和 "poi_id_2"。现在我开始对/tour/add 进行 API 调用,其中包含以下 JSON 数组(省略其他参数):
"poiList": [{"id": "poi_id_1"}, {"id":"poi_id_2"}]
我得到200。
但是:当我开始查询旅游时,结果是"poiList": [null]
。(其他论点省略)
提前感谢您的帮助:)
您不应在 @DBRef
中使用 db
属性,因为您的 POI 驻留在同一个数据库中,并且集合名称是从您的域对象推断出来的。
通过指定@DBRef(db="...")
您要求Spring Data完全在不同的数据库中查找条目。
只需使用@DBref