使用动态投影在子实体上进行Spring JPA分页

问题描述

如何通过动态投影从ParentEntity(单向onetoMany)对ChildEntity进行分页。这是我的代码示例,可在对Parent进行分页时使用。

存储库 - 我尝试了一下,看起来是response,但是抛出了

由以下原因引起:org.springframework.beans.factory.BeanCreationException:创建名称为'dumyRepository'的bean时出错:调用init方法失败;嵌套异常是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),但在带注释的查询“从ParentEntity中选择子项p内部联接p.childEntities子项,其中p =:type”中找不到参数“ Optional [dumyIds]”!

 `@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,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;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)