I'll be brutally honest...I'm not a huge fan of JPA (or ORM in general). When I first learned ORM (anybody remember Castor?), I thought it was amazing. I could map objects to table and properties to columns and it was like magic! Except that it wasn't magic...I still had to define the mapping. And what I learned from all of that is that I'm pretty good at writing SQL, but I'm HORRIBLE at defining mappings...especially if the database schema deviates (as it often does) from the domain model. Therefore, although I still do some JPA from time to time, I would prefer
JDBC (well, Spring's abstraction of JDBC) over JPA any day.
That said, if you must do JPA, then there's no way to avoid the mapping. It's just so essential to JPA. Therefore, since I can't eliminate mapping pain, I seek ways to reduce pain in writing repositories. Before Spring Data JPA, I observed that all of my repositories, regardless of the domain, looked pretty much the same. My repositories were just thing wrappers around EntityManager and had (more or less) the exact same methods. I hated it. But if I'm going to do JPA today, then Spring Data JPA is the way to go. Let Spring handle all of the EntityManager stuff and just write a repository interface. Easy-peasy (except for the mapping stuff).
So yeah...my book covers JPA using Spring Data JPA. What's nice about that is that the programming model for Spring Data JPA is nearly identical to working with Spring Data Cassandra, Spring Data JDBC, Spring Data MongoDB, ... etc. There are subtle differences, but for the most part, once you know how to work with one kind of database with Spring Data, it's easy to apply that know-how to another kind of database. And, in fact, the book will cover Spring Data JPA, SD-JDBC, SD-MongoDB, and SD-Cassandra.