+1 The problem with collections is that its hard to implement paging - you have to convert to the list before you do that ;)
You will also need the IPageableComponent patch to be implemented to reuse the paging navigation. Igor > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of > Jonathan Locke > Sent: Friday, July 29, 2005 9:59 PM > To: wicket-user@lists.sourceforge.net > Subject: Re: [Wicket-user] lists > > > i'm wondering if we shouldn't leave the existing listview > stuff alone altogether and instead start a new db-centric > CollectionView that can handle all this new stuff. one thing > i keep running into with hibernate is that i want to view > Sets instead of lists. a DatabaseCollectionView could be > tuned to database-specific issues like the things you guys > are bringing up. > > Phil Kulak wrote: > > >No, the query cache only caches the primary keys. The first > time it's > >run all the objects are sent accross and each one is cached > by primary > >key. The set of primary keys returned for that query are also cached. > >Then, the next time the same query is run, it issues a > select for each > >key in the cached set, with each one being a hit presuming > the objects > >haven't expired. If iterator does n+1 selects for the FIRST > query, that > >would be very bad. Most of the time you run a query only once and I > >wouldn't want to do n+1 selects for each of those cases. > > > >The more I think about this aproach the more I like it. I think it > >would be nice to keep ListView as it is, but have PageableListView > >delegate to an interface like this. And also, I don't think the > >interface is too sparse. I typed that last response to quickly. The > >PageableListView only needs to get results and the total. If > you want > >to support ordering, or anything else, you can do that > directly on the > >delegate. > > > >One thing I would add though, would be a > setPageableListView() method. > >If the DataProvider knows about its container, it can do > cleanup things > >when it's underlying data changes (like a removeAll() when a > sort order > >or filter is added). > > > >On 7/29/05, Igor Vaynberg <[EMAIL PROTECTED]> wrote: > > > > > >>>Yea, I can see how that would work. You're just saying to put the > >>>"black box" in the ListView, right? > >>> > >>> > >>There is no black box. The paging that the pagedlist does > is no longer > >>necessary. > >> > >> > >> > >>>Your DataProvider > >>>interface is a bit too simple (doesn't allow ordering, and EJB and > >>>Hibernate2 can't wrap an object in a model with only the object > >>>itself for reference), but I think it could work nicely with some > >>>fleshing out. > >>> > >>> > >>I am working on example that does both of the above, here > are some snippets: > >> > >>Sorting (I know its not generalized yet, just a working prototype) > >> > >>public class SortableContactDataProvider extends > ContactDataProvider { > >> private String sort; // <===== yes later this will > be a list > >>of sortparams > >> public Iterator iterator(int first, int count) > >> { > >> return getContactsDB().find(first, count, > sort).iterator(); > >> } > >> public void setSort(String sort) { > >> this.sort=sort; > >> } > >> public String getSort() { > >> return sort; > >> } > >>} > >> > >>Model wrapping: > >> > >>public class DetachableContactModel extends > >>AbstractReadOnlyDetachableModel { > >> private long id; > >> private transient Contact contact; > >> > >> protected ContactsDatabase getContactsDB() { > >> return DatabaseLocator.getDatabase(); > >> } > >> > >> public DetachableContactModel(Contact c) { > >> this(c.getId()); // <=========== here is the trick > >> contact=c; > >> } > >> > >> public DetachableContactModel(long id) { > >> if (id==0) throw new IllegalArgumentException(); > >> this.id=id; > >> } > >> > >> protected void onAttach() > >> { > >> if (contact==null) { // <======== no need > to load if > >>ctor with object used > >> contact=getContactsDB().get(id); > >> } > >> } > >> > >> ... > >>} > >> > >> > >> > >>>Returning an Iterator is very nice. If all you need to do > is iterate, > >>>there's no reason to require a List. > >>> > >>> > >>What more can you do with a read-only list? > >> > >> > >> > >>>But because I'm > >>>implementing a List, there's no way to incorporate that. > >>>However, returning a list WILL use the cache, just not by default. > >>>You have to set useQueryCache to true. > >>> > >>> > >>I don't think that works the same way, I might be wrong > though. If you > >>set hibernate.use_query_cache=true and then set > >>query.setCachable(true) you will cache the entire resultset > which is > >>not the same. When you call > >>query.iterate() it uses n+1 queries to retrieve data, that > means the > >>first query gets all the primary keys, and then it retrieves the > >>objects object by object (the other n queries) so you end > up with each > >>object being cached separately in the cache not as the entire > >>resultset. This gives you a much higher cache-hit chance when > >>retrieving multiple objects and when retrieving an object by pk. > >> > >>-Igor > >> > >> > >> > >> > >>------------------------------------------------------- > >>SF.Net email is sponsored by: Discover Easy Linux Migration > Strategies > >>from IBM. Find simple to follow Roadmaps, straightforward articles, > >>informative Webcasts and more! Get everything you need to get up to > >>speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click > >>_______________________________________________ > >>Wicket-user mailing list > >>Wicket-user@lists.sourceforge.net > >>https://lists.sourceforge.net/lists/listinfo/wicket-user > >> > >> > >> > > > > > >------------------------------------------------------- > >SF.Net email is sponsored by: Discover Easy Linux Migration > Strategies > >from IBM. Find simple to follow Roadmaps, straightforward articles, > >informative Webcasts and more! Get everything you need to get up to > >speed, fast. http://ads.osdn.com/?ad_idt77&alloc_id492&opÌk > >_______________________________________________ > >Wicket-user mailing list > >Wicket-user@lists.sourceforge.net > >https://lists.sourceforge.net/lists/listinfo/wicket-user > > > > > > > > > ------------------------------------------------------- > SF.Net email is sponsored by: Discover Easy Linux Migration > Strategies from IBM. Find simple to follow Roadmaps, > straightforward articles, informative Webcasts and more! Get > everything you need to get up to speed, fast. > http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click > _______________________________________________ > Wicket-user mailing list > Wicket-user@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > ------------------------------------------------------- SF.Net email is sponsored by: Discover Easy Linux Migration Strategies from IBM. Find simple to follow Roadmaps, straightforward articles, informative Webcasts and more! Get everything you need to get up to speed, fast. http://ads.osdn.com/?ad_idt77&alloc_id492&op=click _______________________________________________ Wicket-user mailing list Wicket-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wicket-user