excessive LazyQuery.size() calls in Table with LazyQueryContainer?


I’ve implemented a Table with LazyQueryContainer that get data from a service.

I’ve added a counter to register how many times LazyQueryContainer.containsId() and consequently LazyQuery.size() is being called.

I got surprised. For a collection of 15 objects, I got 18 calls on LazyQuery.size(). With that I got 18 calls to my service…

When I add the number of row it come impracticable… :frowning:

It has something not right with this behavior. I just don’t know yet if its problem on Vaadin’s Table or it add on…

Anyone have seen this ?



Yes I have. In the JPA Criteria Query container, which wraps LZQ, I ended up caching the results of the size() method in order to avoid excessive queries. Table does appear to be the culprit.

Since implementing a service-based variant likely led you to get a fairly detailed understanding of LZQ, you can likely just borrow the relevant pieces of code from JPA Criteria Query Container (source is online)

Hi Jean,

Thanks for the tip…

I saw your add-on, very clever.

I’ve implemented the size cache too, but I had to create my own LazyQueryView because the private method below:

    private void queryItem(final int index) {
        final int batchSize = getBatchSize();
        final int startIndex = index - index % batchSize;
        final int count = Math.min(batchSize, [b]
[/b] - startIndex);

I think you have missed this piece too, because you are calling lazyQueryView.getItem in your BeanTupleQueryView:

   public Item getItem(int index) {
        // standard behavior of getItem.
        Item item = lazyQueryView.getItem(index);
        return item;

thanks again and cheers,


put up a patch
with a
pull request
if anyone’s interested. It was pretty simple and could have been done in extensions of the AbstractBeanQuery but could not due to a call inside the private method.