Last Updated : 12 Mar, 2024
Hibernate is used to increase the data manipulation efficiency between the spring application and the database, insertion will be done is already defined with the help of hibernating.
In this article, we will discuss One-to-Many Mapping in the Hibernate. Let's understand the One-to-many mapping with the help of a real-life example. Bike manufacturers can manufacture multiple models of the bike, but the same bike model cannot be manufactured by multiple manufacturers.
Syntax:
This mapped variable of the other tables is responsible for mapping between two tables.
@oneToMany(mappedby=”nameofmappedvariable”)
For this example, we will map the id field of manufactures to the manufacture_id of the model entity.
1. Configuration of Hibernate One-to-Many Mapping 1.1 Go to this spring initializr and fill in the details mentioned.Click on Generate which will download the starter project.
1.2 Extract the zip fileNow open a suitable IDE and then go to File > New > Project from existing sources > Spring-boot-app and select pom.xml. Click on import changes on prompt and wait for the project to sync as pictorially depicted below as follows:
1.3: Adding the necessary properties in the application.properties fileDatabase configuration required for connection of Mysql database to the Spring Boot Application.
spring.datasource.username=root1.4 Folder directory creation
spring.datasource.password=Aayush
spring.datasource.url=jdbc:mysql://localhost:3306/mapping
spring.jpa.hibernate.ddl-auto=update
Go to src > main > java > com > example > Mapping and create two files in the models folder i.e Manufactures.java and Model.java
2. Implementing the ApplicationOver here, we will implement the
This contains the entity Manufactures, which contains the required associated fields.
package com.example.Mapping.Models;
import javax.persistence.*;
import java.util.List;
@Entity
public class Manufactures {
// Unique identifier for the manufacturer
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
// Name of the manufacturer
private String manufactures_name;
// A manufacturer can have many models
@OneToMany(mappedBy = "manufacturer")
private List<Model> models;
// Constructor with both id and name
public Manufactures(int id, String manufactures_name) {
this.id = id;
this.manufactures_name = manufactures_name;
}
// Default constructor
public Manufactures() {
}
// Getters and setters for id and name
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getManufactures_name() {
return manufactures_name;
}
public void setManufactures_name(String manufactures_name) {
this.manufactures_name = manufactures_name;
}
// Getter for models
public List<Model> getModels() {
return models;
}
// Setter for models
public void setModels(List<Model> models) {
this.models = models;
}
}
2.2 Models (Mapped by table)
This contains the entity Model with various fields and methods-
package com.example.Mapping.Models;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
@Entity
public class Model {
// Unique identifier for the model
@Id
private int model_id;
// Name of the model
private String name;
// A model belongs to one manufacturer
// Foreign key referencing the manufacturer table
@ManyToOne
@JoinColumn(name = "manufacture_id")
private Manufactures manufacturer;
// Constructor with all fields
public Model(int model_id, String name, Manufactures manufacturer) {
this.model_id = model_id;
this.name = name;
this.manufacturer = manufacturer;
}
// Default constructor
public Model() {
}
// Getters and setters
public int getModel_id() {
return model_id;
}
public void setModel_id(int model_id) {
this.model_id = model_id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Manufactures getManufacturer() {
return manufacturer;
}
public void setManufacturer(Manufactures manufacturer) {
this.manufacturer = manufacturer;
}
}
3. Adding the JPA repository 3.1 ManufactureRepo
This Interface contains the forms the bridge of entity Manufactures to the Database
Java
package com.example.Mapping.Repositories;
import com.example.Mapping.Models.Manufactures;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* Spring Data JPA repository for the Manufacture entity.
* This interface extends JpaRepository and provides basic
* CRUD operations for Manufactures entities.
*/
public interface ManufacturesRepo extends JpaRepository<Manufactures, Integer> {
}
3.2 ModelRepo
This Interface contains the forms the bridge of entity Model to the Database
Java
package com.example.Mapping.Repositories;
import com.example.Mapping.Models.Model;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* Spring Data JPA repository for the Model entity.
* This interface extends JpaRepository and provides basic
* CRUD operations for Model entities.
*/
public interface ModelRepo extends JpaRepository<Model, Integer> {
}
3.3 MappingApplication
Driver class for Spring Boot application to test the One-to-One Mapping of hibernate.
package com.example.Mapping;
import com.example.Mapping.Models.Manufactures;
import com.example.Mapping.Models.Model;
import com.example.Mapping.Repositories.ManufacturesRepo;
import com.example.Mapping.Repositories.ModelRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* Spring Boot application for mapping relationships between Manufactures and Models.
*/
@SpringBootApplication
public class MappingApplication implements CommandLineRunner {
// Injecting Manufactures and Model repositories using autowiring
@Autowired
private ManufacturesRepo manufacturesRepo;
@Autowired
private ModelRepo modelRepo;
public static void main(String[] args) {
SpringApplication.run(MappingApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
// Creating a new Manufactures object with ID 1 and name "Honda"
Manufactures data = new Manufactures(1, "Honda");
// Saving the Manufactures record
manufacturesRepo.save(data);
// Creating two new Model objects associated with the "Honda" manufacturer
Model model1 = new Model(1, "AYZ", data);
Model model2 = new Model(2, "ZET", data);
// Saving the Model records
modelRepo.save(model1);
modelRepo.save(model2);
}
}
Run the main application:
Console log of project running.
Manufacture TableDatabase view of manufactures table:
Model Table
Database view of model table:
The below image depicts the link between the two tables.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4