Разбивка на страницы в Spring JPA по вложенным объектам с использованием динамической проекции
Как разбить на страницы ChildEntity из ParentEntity (однонаправленный oneToMany) через динамическую проекцию. Вот мой образец кода, который работает при разбиении на страницы на родительском.
Репозиторий - пробовал, смотрел этот ответ, но он выдает
Вызвано: org.springframework.beans.factory.BeanCreationException: ошибка создания bean-компонента с именем dumyRepository: сбой при вызове метода инициализации; вложенное исключение - java.lang.IllegalStateException: использование именованных параметров для метода public abstract org.springframework.data.domain.Page com.api.repo.DumyRepository.findByDumyIdIn(java.util.Set,java.lang.Class,org.springframework.data.domain.Pageable), но параметр 'Optional[dumyIds]' не найден в аннотированном запросе 'выберите дочерний элемент из внутреннего соединения ParentEntity p p.childEntities child, где p =:type'!
`@Query("select child from ParentEntity p inner join p.childEntities child where p = :type")
<T> Page<T> findByDumyIdIn(Set<String> demoIds, @Param("type") Class<T> type, Pageable pagable);`
Может я что-то здесь упускаю?
@Repository
public interface ParentRepository extends
JpaRepository<ParentEntity, Long> {
<T> Page<T> findByDumyIdIn(Set<String> dumyIds, Class<T> type,Pageable pagable);
}
Проекционные интерфейсы
public interface ChildDetailsView {
String getDumyId();
List<ChildEntity> getChildEntities();
}
public interface ParentDetailsView {
Long getId();
String getDumyId();
String getDc();
String getComp();
}
Классы обслуживания
public Map<String, ParentDetailsView> findParentMapping(Set<String> dumyIds, Pageable pageable) {
return this.dsRepo.findByDumyIdIn(demoIds,ParentDetailsView.class,pageable)
.stream()
.collect(Collectors.toMap( k -> k.getDumyId(), v->v));
}
public Map<String, ChildDetailsView> findChildMapping(Set<String> dumyIds,
Pageable pageable) {
return this.dsRepo.findByDumyIdIn(demoIds, ChildDetailsView.class,pageable)
.stream()
.collect(Collectors.toMap( k -> k.getDumyId(), v->v));
}
Классы сущностей
@Entity
public class ParentEntity{
@Id
private Integer id;
@NonNull
@Column(nullable = false, length = 31)
private String dumyId;
@NonNull
@Column(nullable = false, length = 31)
private String dc;
@NonNull
@Column(nullable = false, length = 31)
private String comp;
@OneToMany
private List<ChildEntity> childEntities;
}
@Entity
public class ChildEntity {
@Id
private Integer id;
@NonNull
private Sting name;
}