See the
hibernate manual and
this stackoverflow threadI think you are mixing up the how and when, as described at both links. Eager fetching can still cause the N+1 issue for collections. To solve this, I think you want to try the join fetch. If you are using Hibernate and not JPA then you can try the @Fetch annotation with FetchMode.JOIN. If you are using JPA then I think your options are to add the Hibernate specific annotation, knowing that you then are stuck w/ Hibernate and may not be able to switch providers, or use JPQL and put the fetch mode in the query. Unfortunately I don't think that you can specify the fetch mode using JPA2's criteria API (or at least I haven't figured out how), which is why you'd have to use the JPQL instead.
BTW, you can turn on SQL output (hibernate.show_sql = true) and experiment with each of the fetching strategies to see exactly what is happening under the hood.