Vaadin Tip: Lazy Loading and Item Identity
When using grids, trees, or any other of the multi-valued component with Vaadin you often want to display data from a database table, and typically you have more than a few rows in the database.
In this case loading, thousands or even millions of records don’t make sense and would be a huge performance problem. For this use case, Vaadin provides lazy loading using a
To create a
CallBackDataProvider you must implement a
CountCallback and a
CountCallback is used to provide the total number of records. And the
FetchCallback is used for paging. Both methods receive an
Query object that contains filter, sorting, offset and limit.
In this example, you can see how to use offset and limit.
DataProvider<Employee, Void> dataProvider = new CallbackDataProvider<>( query -> employeeRepository.findAll(query.getOffset(), query.getLimit()), query -> employeeRepository.count() );
Grid or the
DataProvider there are methods that are using an item:
Ever wondered how Vaadin is finding the right item in the underlying data structure? No surprise – it uses
But what if you can’t control how
equals() is implemented? For example, is the Class that you use in the Grid is generated directly from the database tables like jOOQ does?
No worries! Vaadin provides another constructor to create a
As a third parameter, you pass a ValueProvider that is responsible to return a unique identifier. In the example, this is the ID of the Employee.
DataProvider<Employee, Void> dataProvider = new CallbackDataProvider<>( query -> employeeRepository.findAll(query.getOffset(), query.getLimit()), query -> employeeRepository.count(), Employee::getId );