I have been working with different data access frameworks since 2005. I started with simple JDBC and learnt various pros and cons of it. then moved to connection pooling and advanced topics. explored Open JPA , Hibernate , Spring data , Spring JDBC , serialization using thrift and protocol buffer etc. Hibernate or JPA is not built for batch operations or anything where you need to fetch an object from database and perform some business logic in a loop. When you loop through the entities and each entity holds a huge payload such as big XMLs/Strings or binary data, they pollute the 1st level cache of hibernate. It results in repeated and frequent GCs and slow down your application, sometimes causes out of memory . So never ever use hibernate or JPA for batch or loop-> process uses cases. Spring jdbc performs better compare to JPA when you need to perform a batching/looping.