Разбивка на страницы в 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;
}

0 ответов

Другие вопросы по тегам