What is the difference between an Spring Entity Manager and Spring Data Repository?
Solution 1:
There are several layers of working with persistent data in Java/Spring:
- JDBC
- JdbcTemplate
- JPA (contains
EntityManager
) - Spring Data JPA (contains
Repository
)
Each abstraction shields developers from lower-level details, but it can
bring its own complexities. JdbcTemplate is a thin abstraction over plain JDBC.
Repository
is an abstraction over EntityManager
. It shields developers from
some complex details that are introduced with EntityManager
and adds boilerplate code and many convenient methods.
For instance, CrudRepository
adds the implementation of findAll()
, which is so common that it makes sense to predefine it. Repositories have many convenience methods for generating queries from method names (convention over configuration), from the entities themselves (Query By Example). They allow to use nice typesafe Fluent API with Query DSL and or enable dynamic projections.
Solution 2:
This two interfaces presents two different approaches:
-
org.springframework.data.repository.CrudRepository
is common interface for repositories which provide CRUD operations. -
javax.persistence.EntityManager
is associated with a persistence context. Spring has its own interface which extendsCrudRepository
calledJpaRepository
for this purposes.
I hope you know about benefits or disadvantages of persistent API. If you don't you can read answers to this question.