Spring Jpa数据,可分页,Pagerequest

时间:2017-01-30 07:14:17

标签: java spring spring-mvc spring-data-jpa

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

  

请求处理失败;嵌套异常是   java.lang.IllegalArgumentException:您必须至少提供一个   财产排序依据! java.lang.IllegalArgumentException:你必须这样做   提供至少一个属性来排序!         org.springframework.data.domain.Sort<初始化>(Sort.java:92)         org.springframework.data.domain.Sort<初始化>(Sort.java:80)         org.springframework.data.domain.PageRequest<初始化>(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);

我的服务类:

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

    List<Node> getNodes(Pageable pageable);
}

我的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);
}

我的控制器类:

@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);
}

当我尝试拨打“http://localhost:8088/FNDWEB/rest/node/page/50”时,会显示上述错误。

1 个答案:

答案 0 :(得分:5)

异常消息和documentation of PageRequest应该可以解决您的问题。如果您向Sort.Direction构造函数提供PageRequest,则还必须提供至少一个属性名称(根据哪些实体应进行排序)。

例如:

PageRequest page_req = new PageRequest(0, last_item, Direction.DESC, "idNode");