@BatchSize annotation is a great way to increase performance when dealing with large result sets:
The annotation is often misunderstood.
@BatchSize on collections is not related to the collections size. Instead it's related to the number of uninitialized Foos contained in the current session.
So, when foos has a size of 100, all bars will be fetched with 1 SELECT instead of 100 SELECTs.