#spring #mongodb #spring-data #dbref
#весна #mongodb #весна-данные #dbref
Вопрос:
У меня есть модель велосипеда:
public class Bike {
@Id
private ObjectId objectId;
@DBRef
private Brand brand;
private String model;
}
и модель бренда:
public class Brand {
@Id
private ObjectId objectId;
private String name;
@DBRef
private List<Bike> bikes;
}
Если я использую bikeRepository.findAll()
предоставленные Spring Data, я попадаю в цикл, поскольку bikes ссылается на документ бренда, который, в свою очередь, имеет ссылки на документ Bike.
Как с этим справиться? Я хотел бы получить список велосипедов с объектом бренда (или даже просто названием бренда)
Ответ №1:
Попробуйте добавить @JsonBackReference
аннотацию к вашему классу bike:
public class Bike {
@Id
private ObjectId objectId;
@JsonBackReference
@DBRef
private Brand brand;
private String model;
}
Комментарии:
1. Я попробовал это, и хотя это немного ускоряет работу запроса, он по-прежнему работает чрезвычайно медленно. Когда у меня была строка в качестве бренда вместо объекта бренда, запрос выполнялся менее чем за 2 секунды. Теперь, при том же количестве байтов, это занимает где-то от 12 до 15 секунд
2. @SebastianM Ну, ваш первоначальный вопрос касался только проблемы с циклом. Как вы храните свои документы в MongoDB?
3. Что вы имеете в виду под «как»?
4. @SebastianM Как в том, что вы храните ObjectId байков в Brand? И идентификатор объекта бренда в bike?
5. Да, именно так я храню свои документы. Я вставил свой код в исходное сообщение для справки.