This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.
Well, eagar fetching can give you more data than you need and cause inefficiencies. Alternatively, lazy loading might not give you enough data, and you either get Lazy Loading Exceptions, or you have multiple trips back and forth to the database to get what you need.
Here's a little tutorial on how hibernate works. It might provide you some more information on what you're after:
Actually Cameron gave you the entire gist of it for you to see the advantages and disadvantages.
Basically they have the same advantages and disadvantages but opposite of each other.
Fetching should be use case driven and not mapping driven. So for me the best approach is everything is mapped as lazy loading, and now I can set the fetching strategy at query time. So when I have a use case that needs X amount of data I get X amount of data and nothing more and nothing less. If you choose lazy all the time for everything then you will be getting less than X for most of your use cases. If you eager fetch everything by default, then you will be getting more than X for most of your use cases.