问题描述
如何通过动态投影从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 (将#修改为@)