关于jpa分页查询的问题,谢谢解答 40C
 @Override
    public Page<Auth> getAllAuth(Integer pageNum, Integer pageSize) {

        Sort sort = new Sort(Sort.Direction.ASC, "sort");
        Pageable pageable = PageRequest.of(pageNum, pageSize, sort);
        Specification<Auth> authSpecification = new Specification<Auth>() {
            @Override
            public Predicate toPredicate(Root<Auth> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                query.select(root.get("authID").get("authName").get("parentDataBase").get("onSqlTableName").get("authAddress").get("remark").get("authClassType"));/

                                /我想限制输出字段,如果不加这条是全部输出。加了这条报错 Illegal attempt to dereference path source [null.authID] of basic type; nested exception is java.lang.IllegalStateException: Illegal attempt to dereference path source [null.authID] of basic type
//另外如果我想在最终输出上增加一个自定义字段,有没有官方的方法可以用?谢谢各位帮忙
                                query.groupBy(root.get("parentAddr"));
                query.where(cb.equal(root.get("authClassType").as(String.class), "1"));
                query.orderBy(cb.desc(root.get("sort").as(Integer.class)));
                return query.getGroupRestriction();
            }
        };

        Page<Auth> page = authRepository.findAll(authSpecification, pageable);
        System.err.println(page);
        return page;

    }

3个回答

jpa 返回的是实体类, 所有会包含实体类所有的字段,这个是没有办法的.但是你可以在外面另外定义一个Dto类(和实体类差不多),这个是工具类,你可以网上搜一个
这个类的作用.然后在这个类里面定义你需要的字段,把page.getContent返回的实体类的字段赋值给这个dto类,然后返回给dto就可以了.我原来做过,就是这样解决的.
希望可以帮到你!

qq_37962402
生如夏花帅 回复u014353911: 不是, 是把page.getContent返回的数据List<实体> list ,然后定义一个Dto里面只有你需要的数据,类型最好和实体类一样,参数也最好一样.然后for循环这个list实体,返回把实体里面的数据对应的赋值给dto的属性.
接近 2 年之前 回复
u014353911
wuruize888 把page.getContent返回的实体类的字段赋值给这个dto类,这个该怎么写?
接近 2 年之前 回复

a 返回的是实体类, 所有会包含实体类所有的字段,这个是没有办法的.但是你可以在外面另外定义一个Dto类(和实体类差不多),这个是工具类

List<PostMessage> postMessageList = postMessagePage.getContent();
    postMessageList.forEach(postMessage -> dtoList.add(transPostToDto(postMessage)));

              private PostMessageDto transPostToDto(PostMessage postMessage){
    PostMessageDto dto = new PostMessageDto();
    BeanUtils.copyProperties(postMessage, dto,"content");

    return dto;
}
    这是我写的类似的
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问