How to Integrate Spring Boot with Hibernate


Hibernate mapping refers mapping between entity classes and relationship between tables in the ORM. Following are the 4 types of mapping. An association mapping can be unidirectional as well as bidirectional.

1) One To One Mapping: – Its represents the one to one relationship between two tables.
2) One To Many Mapping: – It’s represents the one to many relationship between two tables.
3) Many To One Mapping: – It’s represents the many to one relationship between two tables.
4) Many To Many Mapping: – It’s represents the many to many relationship between two tables.

1) One To One Mapping: – Here is one to one relationship between user and userDetails. In user table we will store the reference of userDetails table. Lets see how to create entity with one to one relationship.

Step 1:  Create class User.java

import java.io.Serializable;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToOne;
import lombok.Getter;
import lombok.Setter;

@Entity
@Setter
@Getter
public class User implements Serializable {
	
	/**
	 *   
	 */
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY) 
	private Long id;
	
	private String name;
	private String username;
	private String password;
	
	@OneToOne         // one to one relationship to userDetails
	private UserDetails userDetails;
}

Step 2:  Create class UserDetails.java

import java.io.Serializable;
import java.util.Date;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.Getter;
import lombok.Setter;

@Entity
@Setter
@Getter
public class UserDetails implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	private String birthPlace;

}

Now you will run your project and check database. In your database you will find two table user and user_details.
on user table you will find out user_details _id as a FORIGN KEY of user_details table.

UserTable
UserDetail

 

 

 

 

2) One To Many Mapping: – Here is one to many relationship between user and address. One user have multiple Address. In address table we will store the reference of user table. Lets see how to create entity with one to many relationship.

Step 1:  Create class User.java

import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.OneToMany;
import jakarta.persistence.OneToOne;
import lombok.Getter;
import lombok.Setter;

@Entity
@Setter
@Getter
public class User implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY) 
	private Long id;
	
	private String name;
	private String username;
	private String password;
	
	@OneToOne
	private UserDetails userDetails;
		
	@OneToMany(cascade = CascadeType.ALL)
	@JoinColumn(name = "userId", nullable = true)
	private List<Address> address;
}

Step 2:  Create class Address.java

import java.io.Serializable;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.Getter;
import lombok.Setter;

@Entity
@Setter
@Getter
public class Address implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY) 
	private Long id;
	
	private String address1;
	private String address2;
	private String city;
	private String state;
	private String country;
}

Now you will run your project and check database. In your database you will find two table user and address.
on address table you will find out user_id as a FORIGN KEY of user table.

UserTable
AddressTable

 

 

 

 

 

3) Many To One Mapping: – Here is many to one relationship between user and role. One role have multiple users. In user table you can store roleId as reference of role table. Lets see how to create entity with many to one relationship.

Step 1:  Create class Role.java

import java.io.Serializable;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.Getter;
import lombok.Setter;

@Entity
@Setter
@Getter
public class Role implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY) 
	private Long id;
	private String name;	
}

Step 2:  Create class User.java

import java.io.Serializable;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import lombok.Getter;
import lombok.Setter;

@Entity
@Setter
@Getter
public class User implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY) 
	private Long id;
	
	private String name;
	private String username;
	private String password;
	
	@ManyToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "roleId", nullable = false)
	private Role role;
}

Now you will run your project and check database. In your database you will find two table role and user. On user table you will find roleId as FORIGN KEY of Role Table.

RoleTable
UserTable

 

 

                                                                                                                                                                                                                 4) Many To Many Mapping: – Here is many to many relationship between Student and Courses. One Student have multiple courses. Lets see how to create entity with many to many relationship.

Step 1:  Create class Student.java

import java.io.Serializable;
import java.util.Set;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.JoinTable;
import jakarta.persistence.ManyToMany;

@Entity
public class Student implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	private String name;
	
	@ManyToMany
	@JoinTable(name = "StudentCourse", joinColumns = @JoinColumn(name = "studentId"), inverseJoinColumns = @JoinColumn(name = "courseId"))
	private Set courses;
}

Step 2:  Create class Courses.java

import java.io.Serializable;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity
public class Courses implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	private String courseName;
}

Now you will run your project and check database. Now you will find 3 tables. First table is student, Second table is Course and third table student_course where you can see student and course both tables FORIGN KEY.

Course Table
Student Table
StudentCourseTable

 

 

 

 

 

That’s all.