This tutorial walks you through the process of mapping a Hibernate one-to-many relationship with Spring Boot, Spring Data JPA and HSQL
What you'll need
- JDK 1.7 or later
- Maven 3 or later
Stack
- Spring Data JPA
- Spring Boot
Init project structure and dependencies
Project structure
├── src
│ └── main
│ ├── java
│ │ └── com
│ │ └── hellokoding
│ │ └── jpa
│ │ ├── model
│ │ │ ├── Book.java
│ │ │ └── BookCategory.java
│ │ ├── repository
│ │ │ └── BookCategoryRepository.java
│ │ └── HelloJpaApplication.java
│ └──resources
│ └── application.properties
└── pom.xml
Project dependencies
Define JPA Entities and Repositories
One-To-Many Relationship
The book_category
and book
tables have a one-to-many relationship via book_category.id
and book.book_category_id
.
Define JPA Entities
JPA Entity is defined with @Entity
annotation, represent a table in your database.
@Table
maps the entity with the table. If no @Table
is defined, the default value is used: the class name of the entity.
@Id
declares the identifier property of the entity.
@Column
maps the entity's field with the table's column. If @Column
is omitted, the default value is used: the field name of the entity.
@OneToMany
and @ManyToOne
defines a one-to-many and many-to-one relationship between 2 entities. @JoinColumn
indicates the entity is the owner of the relationship: the corresponding table has a column with a foreign key to the referenced table. mappedBy
indicates the entity is the inverse of the relationship.
Spring Data JPA Repository
Spring Data JPA contains some built-in Repository
implemented some common functions to work with database: findOne
, findAll
, save
,...All we need for this example is extend it.
Define properties and run the application
Application Properties
Run the application
You can run the application using mvn spring-boot:run
and check the result in the console log