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