#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 для ваших конкретных запросов или создать для него свой собственный общий шаблон.