Persisting data with JPA and Hibernate as its most popular implementation is so easy that you can learn it within a few hours. But the troubles begin, as soon as the application needs to support a huge amount of data or you have to guarantee very short response times. You can fulfill these requirements with advanced JPA features and on top of that, Hibernate offers several proprietary features to support further optimizations. Some examples are selecting the right fetch strategy, using different caches and performing bulk operations. But using them efficiently requires far more knowledge. We will use lots of practical examples to learn about these and other features you can use to avoid performance issues and fulfill challenging performance requirements.