JPA One To Many example with Hibernate and Spring Boot

in this article we will cover one to many relationship in spring boot.

employ has many Address in uni direction relationship.

In this tutorial, I will show you how to implement Spring JPA One-To-Many mapping with Hibernate in a Spring Boot CRUD example using annotation. You’ll know:

  • How to configure Spring Data, JPA, Hibernate to work with Database
  • How to define Data Models and Repository interfaces for JPA One-To-Many relationship
  • Way to use Spring JPA to interact with Database for One-To-Many association
  • Way to create Spring Rest Controller to process HTTP requests

Employ Entity Class 

package com.onetomany.demoonetomany.Employ;

import com.onetomany.demoonetomany.Address.Address;

import javax.persistence.*;
import java.util.List;

@Entity
public class Employ {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    int id;
    String name;
    String status;


    @OneToMany(cascade =CascadeType.ALL)
    @JoinColumn
    List<Address> addressList;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public List<Address> getAddressList() {
        return addressList;
    }

    public void setAddressList(List<Address> addressList) {
        this.addressList = addressList;
    }

    public Employ(String name, String status, List<Address> addressList) {
        this.name = name;
        this.status = status;
        this.addressList = addressList;
    }

    public Employ(int id, String name, String status, List<Address> addressList) {
        this.id = id;
        this.name = name;
        this.status = status;
        this.addressList = addressList;
    }

    public Employ() {
    }
}

Employ Repository Class 
package com.onetomany.demoonetomany.Employ;

import org.springframework.data.jpa.repository.JpaRepository;

public interface EmployRepository extends JpaRepository<Employ,Integer> {

}

Address Entity Class
package com.onetomany.demoonetomany.Address;

import com.onetomany.demoonetomany.Country.Country;

import javax.persistence.*;
import java.util.List;

@Entity
public class Address {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    int id;
    String addressName;

    @OneToMany(cascade = CascadeType.ALL)
            @JoinColumn
    List<Country> country;

    public List<Country> getCountry() {
        return country;
    }

    public void setCountry(List<Country> country) {
        this.country = country;
    }

    public String getAddressName() {
        return addressName;
    }

    public void setAddressName(String addressName) {
        this.addressName = addressName;
    }
}

Address Repository Class
package com.onetomany.demoonetomany.Address;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface Addressrepository extends JpaRepository<Address,Integer> {


}

Controller Class 
package com.onetomany.demoonetomany.API;

import com.onetomany.demoonetomany.Address.Address;
import com.onetomany.demoonetomany.Address.Addressrepository;
import com.onetomany.demoonetomany.Comment.Comment;
import com.onetomany.demoonetomany.Comment.CommentRepository;
import com.onetomany.demoonetomany.Country.Country;
import com.onetomany.demoonetomany.Country.CountryRepository;
import com.onetomany.demoonetomany.Employ.Employ;
import com.onetomany.demoonetomany.Employ.EmployRepository;
import com.onetomany.demoonetomany.Post.Post;
import com.onetomany.demoonetomany.Post.PostRepository;
import com.onetomany.demoonetomany.Request.PostRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@RestController
public class Controller {
    @Autowired
    EmployRepository employRepository;
    @Autowired
    Addressrepository addressrepository;
    @Autowired
    CountryRepository countryRepository;

    @Autowired
    PostRepository postRepository;
  @Autowired
    CommentRepository commentRepository;


    @PostMapping("/add/employ")
    public Employ addemploy(@RequestBody Employ employ){
        List<Country> countryList=new ArrayList<>();
        Country country=new Country();
        country.setStatename("Punjab");
        country.setCode(12340);
        countryList.add(country);

        List<Address> addressList=new ArrayList<>();
        Address address=new Address();
        address.setAddressName("sheikh umad kohna kasur");
        address.setCountry(countryList);
     addressList.add(address);
        Employ employ1=new Employ();
        employ1.setName("Muhammad Waseem haider");
        employ1.setStatus("Mariage");
        employ1.setAddressList(addressList);
    return   employRepository.save(employ1);






    }

    @GetMapping("/list/employ")
    private List<Employ> getAllBooks()
    {
        return employRepository.findAll();
    }

  

}


Application.Properties file
#spring.datasource.url=jdbc:mysql://localhost:3306/waseem
#spring.datasource.username=root
#spring.datasource.password=
#and other credentials

spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.ddl-auto=update
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/blog
spring.datasource.username=root
spring.datasource.password=

Main Class
package com.onetomany.demoonetomany;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.util.ArrayList;
import java.util.List;

@SpringBootApplication
public class DemoonetomanyApplication {

   public static void main(String[] args) {
      SpringApplication.run(DemoonetomanyApplication.class, args);

   }

}

Get All List of Employ
JPA One To Many example with Hibernate and Spring Boot

You may also like...

Leave a Reply

Your email address will not be published.