I agree with you. Most of these problems are infrastructural. There should be direct support for this situations, like paging, in the persistence framework we are using. All other solutions are hacks around it and often are not relevant concepts in the application's domain.
just thinking out loud , pay not attention:
Off course the real challenge is to provide a paging solution that is well integrated in the model. Ideally we would be able to do a query over the domain, with some sort of OQL, and have paging in an efficient way without ever leaving the comfort of the OO model. Something in the lines of
QueryPager<Item> pager = Query.pagedExecute(Item.class,
"orders[date > %1].customer.country == 'PT'", lastWeek);
print(pager.getNumberOfPages(pageSize));
for (Page page : pager.getPages(pageSize)) {
for (Item item : page.getElements()) {
for (Order order : (Collection<Order>) page.getElements(item)) {
Customer customer = (Customer) page.getElement(item, order);
assert(page.getElement(item, order, customer) ==
"PT");
}
}
}
I have to check some existing OQL solutions and how they try to optimize the query. (more one thing to do

)
And how about (new E()).getClass()
E, in the example, is not an example class, it's a generic type. So you can't even do new E().