微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用动态投影在子实体上进行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 举报,一经查实,本站将立刻删除。