Как справиться с двусторонним @DBRef в весенних данных?

#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. Да, именно так я храню свои документы. Я вставил свой код в исходное сообщение для справки.