This example is not quite optimized. The DetachableContactModel's constructor is
public DetachableContactModel(Contact c) { this(c.getId()); } but it should be: public DetachableContactModel(Contact c) { this(c.getId()); setObject(c); } The way it's done in the example although the model is given the contact, it stores only its id and needs to load it from the database in order to access it, even while rendering the table. The way I suggest the model is given the contact and does not need to load it. So, the way it's done in the example database access is as follows: - a list query to get the contacts for a given page - n queries by id, one for each row The way I'm suggesting database access is as follows: - a list query to get the contacts for a give page - no other queties If the row contains say a link column that accesses the row model in the ajax click, then you will see an additional database access by id when the DetachableContactModel is attached. Cheers Marios On Tue, Jun 11, 2013 at 6:56 PM, Daniel Watrous <dwmaill...@gmail.com>wrote: > Hi, > > I'm following the example in the repeaters section for paging through large > amounts of data: > > http://www.wicket-library.com/wicket-examples-6.0.x/repeater/wicket/bookmarkable/org.apache.wicket.examples.repeater.PagingPage > > Based on the example and how I've had to implement this there is a lot of > data access. First is in the ContactDataProvider. The function iterator > queries for the set of data that will be displayed. > > Next, all the objects that are returned need to be wrapped in > a DetachableContactModel. The load mechanism here then loads each > individual object from the datastore. > > In the example, the data is in memory. In a real world scenario the data is > likely to be remote and this setup could have a significant performance > impact. > > Is there some way to cut out some of the data access? For example, can I > get rid of DetachableContactModel and just use the data retrieved through > the ContactDataProvider? > > Thanks, > Daniel >