Hibernate




One to One Mapping

One To One mapping to represent a one to one relationship between database tables. A one to one relationship occurs between tables when one record from the first table corresponds to only one record in the second table.

For example, an Account can belong to one person. So one record in an Account table will correspond to only one record in the Person table.


ONE-TO-ONE-MAPPING


Tools and Technologies Used:

1. Java 8

2. MySQL 8

3. Eclipse IDE

4. mysql-connector-java-8.0.23.jar

5. Hibernate 5.5.7.Final

6. Maven 3.6.1


Maven Project for One to One Mapping

We need to follow below steps:

Step 1: Click on File --> New --> Maven Project.

HIBERNATE-ONE-TO-ONE-MAPPING-CREATE-MAVEN-PROJECT

Step 2: Check Checkbox Create a simple project (skip archetype selection). Click on Next button.

HIBERNATE-ONE-TO-ONE-MAPPING-CREATE-MAVEN-PROJECT

Step 3: Enter Group Id, Artifact Id, Version, Packaging, Name, Description details and click on Finish button.

HIBERNATE-ONE-TO-ONE-MAPPING-CREATE-MAVEN-PROJECT

Update pom.xml file.

Open pom.xml file and paste below pom.xml file code.

pom.xml


	<project xmlns="http://maven.apache.org/POM/4.0.0"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
		<modelVersion>4.0.0</modelVersion>
		<groupId>com.hareeshsoni.blog.hibernate.mapping</groupId>
		<artifactId>HibernateOneToOneExample</artifactId>
		<version>0.0.1-SNAPSHOT</version>
		<name>HibernateOneToOneExample</name>
		<description>Hibernate One To One Example</description>
		<dependencies>
			<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
			<dependency>
				<groupId>org.hibernate</groupId>
				<artifactId>hibernate-core</artifactId>
				<version>5.5.7.Final</version>
			</dependency>
	
			<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
			<dependency>
				<groupId>mysql</groupId>
				<artifactId>mysql-connector-java</artifactId>
				<version>8.0.23</version>
			</dependency>
	
		</dependencies>
		<build>
			<finalName></finalName>
			<plugins>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-compiler-plugin</artifactId>
					<version>3.6.1</version>
					<configuration>
						<source>1.8</source>
						<target>1.8</target>
					</configuration>
				</plugin>
			</plugins>
		</build>
	</project>
		

Update Maven Project

Step 1: Right-click on project HibernateOneToOneExample --> Maven --> Update Project…

HIBERNATE-ONE-TO-ONE-MAPPING-UPDATE-MAVEN-PROJECT

Step 2: Check Checkbox Force Update of Snapshots/Releases. Click on OK Button.

HIBERNATE-ONE-TO-ONE-MAPPING-UPDATE-MAVEN-PROJECT

Project Structure

ONE-TO-ONE-MAPPING


We have used the below JPA Annotations:

@Entity: @Entity annotation specifies that the class is an entity.

@Table: @Table annotation specifies the primary table for the annotated entity.

@Id: @Id annotation marks the particular field as the primary key of the Entity.

@GeneratedValue: This annotation is used to specify how the primary key should be generated.

@Column: This annotation maps the corresponding fields to their respective columns in the database table.

@JoinColumn: This annotation defines the foreign key. It is the column that associates the two tables.

@OneToOne: This annotation is used to create one to one relationship between Person and Account entities.


Account.java


	package com.hareeshsoni.blog.hibernate.mapping.model;
	
	import javax.persistence.Column;
	import javax.persistence.Entity;
	import javax.persistence.GeneratedValue;
	import javax.persistence.GenerationType;
	import javax.persistence.Id;
	import javax.persistence.Table;
	
	@Entity
	@Table(name = "account")
	public class Account {
		@Id
		@GeneratedValue(strategy = GenerationType.IDENTITY)
		@Column(name = "account_id")
		private int accountId;
	
		@Column(name = "account_number")
		private String accountNumber;
	
		public Account() {
		}
	
		public Account(String accountNumber) {
			this.accountNumber = accountNumber;
		}
	
		public int getAccountId() {
			return accountId;
		}
	
		public void setAccountId(int accountId) {
			this.accountId = accountId;
		}
	
		public String getAccountNumber() {
			return accountNumber;
		}
	
		public void setAccountNumber(String accountNumber) {
			this.accountNumber = accountNumber;
		}
	
	}


Person.java


	package com.hareeshsoni.blog.hibernate.mapping.model;
	
	import javax.persistence.CascadeType;
	import javax.persistence.Column;
	import javax.persistence.Entity;
	import javax.persistence.GeneratedValue;
	import javax.persistence.GenerationType;
	import javax.persistence.Id;
	import javax.persistence.JoinColumn;
	import javax.persistence.OneToOne;
	import javax.persistence.Table;
	
	@Entity
	@Table(name = "person")
	public class Person {
		@Id
		@GeneratedValue(strategy = GenerationType.IDENTITY)
		@Column(name = "person_id")
		private int personId;
	
		@Column(name = "person_name")
		private String personName;
	
		@OneToOne(cascade = CascadeType.ALL)
		@JoinColumn(name = "account_id")
		private Account account;
	
		public Person() {
		}
	
		public Person(String personName) {
			this.personName = personName;
		}
	
		public int getPersonId() {
			return personId;
		}
	
		public void setPersonId(int personId) {
			this.personId = personId;
		}
	
		public String getPersonName() {
			return personName;
		}
	
		public void setPersonName(String personName) {
			this.personName = personName;
		}
	
		public Account getAccount() {
			return account;
		}
	
		public void setAccount(Account account) {
			this.account = account;
		}
	
	}
	

HibernateUtil.java


	package com.hareeshsoni.blog.hibernate.mapping.util;
	
	
	import org.hibernate.SessionFactory;
	import org.hibernate.cfg.Configuration;
	
	public class HibernateUtil {
	private static SessionFactory sessionFactory;
		
		private static SessionFactory buildSessionFactory() {
			Configuration configuration = new Configuration();
	    	configuration.configure("hibernate.cfg.xml");
	    	System.out.println("Hibernate configuration file loaded");
	    	SessionFactory sessionFactory = configuration.buildSessionFactory();
	        return sessionFactory;
	    }
		
		public static SessionFactory getSessionFactory() {
			if(sessionFactory == null) 
				sessionFactory = buildSessionFactory();
	        return sessionFactory;
	    }
	}
		

hibernate.cfg.xml

In hibernate.cfg.xml file provide correct username and password.

Create database name "one_to_one_mapping" inside mysql database.


<?xml version='1.0' encoding='utf-8'?>
	<!DOCTYPE hibernate-configuration PUBLIC
		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
		"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
	
	<hibernate-configuration>
		<session-factory>
			<!-- Database connection settings -->
			<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
			<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/one_to_one_mapping</property>
			<property name="hibernate.connection.username">root</property>
			<property name="hibernate.connection.password">########</property>
			<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
			<property name="show_sql">true</property>
			<property name="hbm2ddl.auto">update</property>
			<mapping class="com.hareeshsoni.blog.hibernate.mapping.model.Person" />
			<mapping class="com.hareeshsoni.blog.hibernate.mapping.model.Account" />
		</session-factory>
	</hibernate-configuration>
	

MainApp.java

  
	
	package com.hareeshsoni.blog.hibernate.mapping;
	
	import org.hibernate.Session;
	import org.hibernate.SessionFactory;
	
	import com.hareeshsoni.blog.hibernate.mapping.model.Account;
	import com.hareeshsoni.blog.hibernate.mapping.model.Person;
	import com.hareeshsoni.blog.hibernate.mapping.util.HibernateUtil;
	
	public class MainApp {
	
		public static void main(String[] args) {
	
			SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
			Session session = sessionFactory.openSession();
			session.beginTransaction();
	
			Account account = new Account();
			account.setAccountNumber("ACC-1001");
	
			Person person = new Person();
			person.setPersonName("Mohan");
			person.setAccount(account);
			session.save(person);
			
			Account newAccount = new Account();
			newAccount.setAccountNumber("ACC-1002");
	
			Person newPerson = new Person();
			newPerson.setPersonName("Sohan");
			newPerson.setAccount(newAccount);
			session.save(newPerson);
	
			session.getTransaction().commit();
			session.close();
			sessionFactory.close();
		}
	
	}

	

Now run MainApp.java

ONE-TO-ONE-MAPPING-RUN-MAIN-APP


Output

ONE-TO-ONE-MAPPING-OUTPUT


Database tables:

Account Table

ACCOUNT-TABLE


Person Table

PERSON-TABLE



Download Project Code: