Sounds like a reasonable strategy. When it comes time to retrieve the next block of 100 records, you may want to do that in a separate
thread, so that the request for rows 91-100 doesn't have to wait until rows 101-200 have been retrieved.
It may also be advantageous to use a single shared cache rather than saving the record in the session. Particularly if your application is one in which multiple users are likely to be viewing the same records. Also it may be easier to manage the cache if it's in one place, so you can expire older entries, or reduce or expand the size of the cache based on available memory or performance tuning parameters. And yes, check out the available java caching solutions to save yourself some time.