Spring Data JPA: Difference between revisions
Line 2: | Line 2: | ||
* https://spring.io/projects/spring-data-jpa | * https://spring.io/projects/spring-data-jpa | ||
* JavaDoc https://docs.spring.io/spring-data/jpa/docs/2.1. | * JavaDoc https://docs.spring.io/spring-data/jpa/docs/2.1.1.RELEASE/api/ | ||
=Internal= | =Internal= |
Revision as of 04:54, 16 October 2018
External
- https://spring.io/projects/spring-data-jpa
- JavaDoc https://docs.spring.io/spring-data/jpa/docs/2.1.1.RELEASE/api/
Internal
Overview
Spring Data JPA is a Spring Data project that assists with implementing JPA-based repositories, which persist data in relational databases. The approach involves writing the repository interface, including custom finder methods, and Spring will provide the implementation automatically.
Spring Persistence Concepts
Spring Boot Support
To add support for Spring Data JPA to a Spring Boot project, add the following starter dependency:
dependencies {
implementation('org.springframework.boot:spring-boot-starter-data-jpa')
}
This starter dependency also transitively includes Hibernate as the JPA implementation.
Spring Data JPA needs a database to work with. This is how to add H2 support:
dependencies {
runtimeOnly('com.h2database:h2')
}
Adding Persistence to an Application with Spring Data JPA
Annotate Domain Objects with @Entity
Annotate your domain objects that require persistence with @Entity and designate their primary key field with @Id and optionally with @GeneratedValue. JPA requires each entity class to expose a no-argument constructor, which can be coded manually, or it can be generated with Lombok's @NoArgConstructor:
@NoArgConstructor(access=AccessLevel.PRIVATE, force=true)
Define Relationships between Entities
@ManyToMany, etc.
Declare the JPA Repositories
Entities are built, managed and exposed to the application by JPA repositories. JPA repositories should be explicitly declared in the application. A Spring Data JPA repository is the embodiment of the Spring repository concept concept, which, similarly to a JdbcTemplate-based repository, conceals low-level data access details from the application while exposing Entities to the application. With JdbcTemplate-based repositories the developers need to explicitly declare and implement the methods that should be exposed by the repository. With Spring Data JPA repositories, it is sufficient to extend the CrudRepository interface:
public interface IngredientRepository extends CrudRepository<Ingredient, String> {
}
TODO
TODO
- How to tell that a JPA repository should use a specific database. How is that configured?
- @EnableJpaRepositories(basePackages = "com.example.dev.myproject.driver.repo")