Ehcache查询分页

时间:2014-11-13 18:23:37

标签: ehcache

有没有办法将一个Ehcache查询从X项分页到索引中的Y项?

    Query query = getCache().createQuery();

    Attribute<String> did = new Attribute("did");
    Attribute<Date> activity = new Attribute("activity");
    Attribute<Double> latitude = new Attribute("latitude");
    Attribute<Double> longitude = new Attribute("longitude");

    query
            .addOrderBy(activity, Direction.DESCENDING)
            .includeAttribute(did)
            .includeAttribute(activity)
            .includeAttribute(latitude)
            .includeAttribute(longitude)
            .includeValues()
            .end();

    Results results = query.execute();

    // To do in query???
    List<Result> page = results.range(range * 20, (range + 1) *20);

在调用execute()方法之后,我知道Results.range(int,int)方法可以做到,但我只想获得焦点项。

提前谢谢。

2 个答案:

答案 0 :(得分:0)

你描述的方式就是这样做。

您要查询的内容包含orderBy条款,因此如果不查看所有结果,它甚至无法正确。

还要记住,这是您正在处理的缓存,在不同时间的两个查询可能会因到期或驱逐而返回不同的结果。在此上下文中,尝试在查询执行中获取特定范围的结果可能会显示重复或遗漏的结果。

答案 1 :(得分:0)

这种方式是否能获得更高的性能?

query
    .addOrderBy(activity, Direction.DESCENDING)
    .includeAttribute(activity)
    .includeValues()
    .maxResults((range + 1) * 20)
    .end();

List<Result> page = query.execute().range(range * 20, (range + 1) * 20);

我使用一个活动Date属性,当项目按下缓存时设置,以避免Louis Jacomet暴露出来的问题。