This tutorial walks you through the process of mapping a Hibernate many-to-many relationship with Spring Boot, Spring Data JPA and HSQL

What you'll need

  • JDK 1.7 or later
  • Maven 3 or later


  • Spring Data JPA
  • Spring Boot

Init project structure and dependencies

Project structure

├── src
│   └── main
│       ├── java
│       │   └── com
│       │       └── hellokoding
│       │           └── jpa
│       │               ├── model
│       │               │   ├──
│       │               │   └──
│       │               ├── repository
│       │               │   └──
│       │               └──
│       └──resources
│          └──
└── pom.xml

Project dependencies

Many-To-Many Relationship

The book and publisher tables have a many-to-many relationship via book_publisher table.

Define JPA Entities and Repositories

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.

@ManyToMany defines a many-to-many 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

Source code