Spring Jpa数据,Pageable,Pagerequest

Res*_*eff 1 java spring spring-mvc spring-data-jpa

我在项目中使用Spring JPA DATA。我想使我的数据可分页。我已经将Pageable添加到我的存储库方法中。但是它显示出类似以下错误:

请求处理失败;嵌套异常是java.lang.IllegalArgumentException:您必须提供至少一个属性进行排序!java.lang.IllegalArgumentException:您必须提供至少一个属性进行排序!org.springframework.data.domain.Sort。<init>(Sort.java:92)org.springframework.data.domain.Sort。<init>(Sort.java:80)org.springframework.data.domain.PageRequest。 <init>(PageRequest.java:52)com.datum.fnd.controller.rest.NodeRestController.getNodes(NodeRestController.java:44)sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法).....

我想与您分享我的密码。请查看以下代码。我没有找到我犯错的地方

我的@Repository类:

@Query(value = "select new com.datum.fnd.domain.Node(c.idNode, c.name,c.address, c.description, c.point) from Node c")
List<Node> getNodesByPage(Pageable pageable);
Run Code Online (Sandbox Code Playgroud)

我的服务班:

public interface NodeService extends DefaultService<Node, Long> {
    List<Node> getUnboundedNodes();

    List<Node> getNodes(Pageable pageable);
}
Run Code Online (Sandbox Code Playgroud)

我的ServiceImpl类:

@Service
public class NodeServiceImpl implements NodeService {

private static final Logger LOG = Logger.getLogger(NodeServiceImpl.class);

@Autowired
private NodeRepository nodeRepository;

@Autowired
private ChannelNodeRepository channelNodeRepository;

@Override
public Node create(Node node) {
    return nodeRepository.save(node);
}


@Transactional(readOnly = true)
@Override
public List<Node> list() {
    return nodeRepository.selectAll();
}

@Transactional(readOnly = true)
@Override
public List<Node> getNodes(Pageable pageable) {
    return nodeRepository.getNodesByPage(pageable);
}
Run Code Online (Sandbox Code Playgroud)

我的控制器课程:

@RequestMapping(value = "/page/{last_item}", method = RequestMethod.GET)
public List<Node> getNodes(@PathVariable(value = "last_item") int last_item) {
    LOG.info("Retrieve all nodes");

    PageRequest page_req = new PageRequest(0, last_item, Direction.DESC);
    return nodeService.getNodes(page_req);
}
Run Code Online (Sandbox Code Playgroud)

当我尝试调用“ http:// localhost:8088 / FNDWEB / rest / node / page / 50 ”时,它显示了上述错误。

Jak*_*Ch. 6

PageRequest的异常消息和文档应使您的问题更清楚。如果提供Sort.DirectionPageRequest构造函数,则还必须至少提供一个属性名称(根据应排序的实体)。

例如:

PageRequest page_req = new PageRequest(0, last_item, Direction.DESC, "idNode");
Run Code Online (Sandbox Code Playgroud)


小智 5

PageRequest 构造函数已弃用。请改用 PageRequest.of。

public static PageRequest of(int page, int size) {
    return of(page, size, Sort.unsorted());
}

public static PageRequest of(int page, int size, Sort sort) {
    return new PageRequest(page, size, sort);
}

public static PageRequest of(int page, int size, Direction direction, String... properties) {
    return of(page, size, Sort.by(direction, properties));
}
Run Code Online (Sandbox Code Playgroud)