Hibernate Mapping Example
In this example, we will show you how to use hibernate with its mapping capability. We are going to show a one-to-many bi-directional mapping in hibernate using XML mappings. We will configure our hibernate with hibernate.cfg.xml
and then we are going to create a mapping with example.hbm.xml
. One-to-many relationship is the relationship in which each record in one table is linked to multiple records in another.
1. Introduction
Hibernate is an object-relational mapping(ORM) framework for java language. It provides a way to map Java classes to relational database tables. We can achieve this mapping through XML mapping OR Annotation mapping. In this example, we will be showing this mapping through XML mapping. We will be using one-to-many relationship mapping.
2. Environment
- Windows 7
- Java version 7
- Eclipse Kepler 4.3
- Maven 3.0.4
- MySQL 5.0.86
- JBoss-Hibernate Plugin 4.1.2
3. Example Outline
In this example, we will create a maven project in eclipse with hibernate plugin. We will create two different classes which are related to each other in one-to-many relationships and then create its hibernate XML mapping to generate the mapping between Java objects and database tables. At the end, we will create a test program to test our Java objects for updating and retrieving information from the database.
4. Example
Following are the steps we will perform to create our Hibernate Mapping example in this tutorial.
4.1 Create a Maven Project
Create a new maven project in eclipse. Fill in the details for GroupId
as com.javacodegeeks.example
and ArtifactId
as HibernateMappingExample
as shown below
4.2 Add hibernate dependencies
Now we will add the required dependencies for Hibernate. Here we will use Maven’s feature of dependency management in pom.xml.
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.javacodegeeks.example</groupId> <artifactId>HibernateMappingExample</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.3.11.Final</version> </dependency> </dependencies> </project>
4.3 Create Hibernate Configuration File
Let’s create a hibernate configuration file hibernate.cfg.xml
under resources directory in the project. The hibernate wizard will look like below
Do not forget to check “Create a console configuration” checkbox on the screen as shown above. That will be our next step to configure Hibernate Console. The hibernate.cfg.xml
file will look like below:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1/hbtutorial</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> </session-factory> </hibernate-configuration>
4.4 Hibernate Console Configuration
Once you have selected the checkbox for “Create a console configuration”, click Next to go on the screen shown below for hibernate console and click Finish.
You can open Hibernate Console Configuration view in eclipse and it will show database and all the tables of that database.
4.5 Create Java Objects
Since we are showing one-to-many relationship mapping in this example, we will create two different Java classes. We will create Employee.java
and Department.java
objects for our example.
Department.java
package com.javacodegeeks.example; import java.util.Set; public class Department { private Long id; private String departmentName; private Set employees; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getDepartmentName() { return departmentName; } public void setDepartmentName(String departmentName) { this.departmentName = departmentName; } public Set getEmployees() { return employees; } public void setEmployees(Set employees) { this.employees = employees; } }
Employee.java
package com.javacodegeeks.example import java.sql.Date; public class Employee { private Long id; private String firstname; private String lastname; private Department department; public Employee() { } public Employee(String firstname, String lastname) { this.setFirstname(firstname); this.setLastname(lastname); } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } public Department getDepartment() { return department; } public void setDepartment(Department department) { this.department = department; } }
4.6 Map Java Objects to Database
Let’s create a mapping file for each java object to database. In eclipse, under src -> main -> resources, create a file with option Hibernate XML Mapping file (hbm.xml). We will have Employee.hbm.xml
and Department.hbm.xml
.
Employee.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Generated Jul 11, 2016 10:24:48 PM by Hibernate Tools 3.4.0.CR1 --> <hibernate-mapping> <class name="com.javacodegeeks.example.Employee" table="EMPLOYEE"> <id name="id" type="java.lang.Long"> <column name="ID" /> <generator class="assigned" /> </id> <property name="firstname" type="java.lang.String"> <column name="FIRSTNAME" /> </property> <property name="lastname" type="java.lang.String"> <column name="LASTNAME" /> </property> <many-to-one name="department" class="com.javacodegeeks.example.Department" fetch="join"> <column name="DEPARTMENT_ID" /> </many-to-one> </class> </hibernate-mapping>
Department.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Generated Jul 11, 2016 10:24:48 PM by Hibernate Tools 3.4.0.CR1 --> <hibernate-mapping> <class name="com.javacodegeeks.example.Department" table="DEPARTMENT"> <id name="id" type="java.lang.Long"> <column name="ID" /> <generator class="assigned" /> </id> <property name="departmentName" type="java.lang.String"> <column name="DEPT_NAME" /> </property> <set name="employees" table="EMPLOYEE" inverse="false" lazy="true"> <key> <column name="DEPARTMENT_ID" /> </key> <one-to-many class="com.javacodegeeks.example.Employee"/> </set> </class> </hibernate-mapping>
4.7 Create a Hibernate Test Program
Let’s create a test hibernate program to insert some employees for some departments. The source code looks like below
HibernateTestMappingProgram.java
package com.javacodegeeks.example; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; public class HibernateTestMappingProgram { private static SessionFactory factory; private static ServiceRegistry serviceRegistry; public static void main(String[] args) { // TODO Auto-generated method stub Configuration config = new Configuration(); config.configure(); config.addAnnotatedClass(Department.class); config.addResource("Department.hbm.xml"); config.addAnnotatedClass(Employee.class); config.addResource("Employee.hbm.xml"); serviceRegistry = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build(); factory = config.buildSessionFactory(serviceRegistry); HibernateTestMappingProgram hbTest = new HibernateTestMappingProgram(); hbTest.insertEmployee(1,"Mark","Johnson","Sales",1); hbTest.insertEmployee(2,"Jill","Johnson","Marketing",2); } private long insertEmployee(int id, String firstname, String lastname, String deptName, int deptId) { Session session = factory.openSession(); Transaction tx = null; Long empIdSaved = null; try { tx = session.beginTransaction(); Department d = new Department(); d.setDepartmentName(deptName); d.setId(new Long(deptId)); session.save(d); Employee e = new Employee(); e.setFirstname(firstname); e.setLastname(lastname); e.setId(new Long(id)); e.setDepartment(d); empIdSaved = (Long) session.save(e); tx.commit(); } catch(HibernateException ex) { if(tx != null) tx.rollback(); ex.printStackTrace(); } finally { session.close(); } return empIdSaved; } }
5. Conclusion
In this example, we showed how to use hibernate to map one-to-many relationship. We created a test program to test this relationship between Employee and Department.
6. Download
Here we showed how to use Hibernate for mapping relationships in relational database to java objects.
You can download the full source code of this example here: HibernateMappingExample