Разбиение на страницы всех коллекций для сущностей-отношений в JPA

#java #spring #spring-boot #jpa #eclipselink

#java #весна #весенняя загрузка #jpa #eclipselink

Вопрос:

У меня есть объект, который выглядит следующим образом:

 @Entity
@Table(name = "FooTable")
public class FooEntity {
    private Collection<BarEntity> bar;

    @OneToMany(mappedBy = "fooField")
    public Collection<BarEntity> getBars() {
        return bar;
    }

    public void setBars(Collection<BarEntity> barByFooId) {
        this.bar = barByFooId;
    }
}
  

В основном отношение «один ко многим».

Чего я хочу, так это того, что когда у меня есть экземпляр FooEntity , я хочу иметь возможность возвращать ассоциированные данные Collection<BarEntity> с разбивкой на страницы с помощью Spring Page.

Я настроил это таким образом в своем репозитории:

 @Override
@Query("select child from FooEntity p inner join p.barField child where p = :parent")
public Page<BarEntity> findBy(FooEntity parent, Pageable pageable)
  

Что работает. Для одного отношения.

Однако! Многие из моих моделей сущностей имеют отношение «один ко многим» к так называемым BarEntity . Что мне нужно, так это способ указать spring всегда разбивать на страницы мои связанные сущности, потому что я бы предпочел не писать конкретную реализацию для каждой сущности, которая имеет этот тип отношения.

Могу ли я каким-либо образом указать это поведение с минимальным повторением кода?

Комментарии:

1. Нет. Но, пожалуйста, скажите мне, как бы вы хотели, чтобы эта реализация выглядела?

2. Эй, извините, но я не понимаю, о чем вы спрашиваете. Реализация какой части?

3. Как бы вы хотели, чтобы Spring Data выполняла работу, о которой вы просите.

4. Ну, я бы хотел, чтобы любой момент, когда мы скажем foo.getBars() , чтобы это вернулось Page<BarEntity> . Это существующая функциональность. Я просто хотел бы указать эту функциональность для каждого объекта, который имеет связь «один ко многим» с Bars, а не только для fooEntity . Итак, это не столько вопрос «Как Spring это сделает?», Но скорее вопрос «Как мы сообщаем spring, что мы хотим, чтобы он делал один раз »

5. Я думаю, подразумевается, что это новая функция, и вы должны подать ее как таковую. Такая функция должна была бы определить, что это значит для самого объекта модели — когда вы обращаетесь к foo.getBars(), он извлекает и сохраняет все в foo. Что это значит, если getBars уже содержит завершенный список, и должен ли он каким-то образом хранить / кэшировать частичный список там? Вот почему вам может потребоваться определить методы Spring для ваших конкретных запросов или создать для него свой собственный общий шаблон.