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