Hibernate is an object-relational mapping (ORM) library for Java language, providing a framework for mapping an object oriented domain model to a traditional relational database. Hibernate solves object-relational impedance mismatch problems by replacing direct persistence-related database accesses with high-level object handling functions.

Hibernate’s  primary feature is mapping from java classes to database tables and from java data types to SQL data types. Hibernate also provides data query and retrieval facilities. Hibernate generates the SQL calls and attempts to relieve the developers from manual result set handling and object conversion and keep the application portable to all supported SQL databases with little performance overhead.

Hibernate One-To-One mapping

Note: Add the hibernate related jar’s in application class path.

 

In this example we will learn how to map one-to-one relation using hibernate.

Suppose we have a two entity student and address each student has a unique address

 

        Student
           Address

 

To create this relationship you need to have two tables one is STUDEN and other is ADDRESS. The relation model is shown below.

STUDENT
     ID
     NAME
     ADDRESS

 

ADDRESS
   ID
   STREET
   CITY
   STATE
   ZIP CODE

 

 

To create STUDENT and ADDRESS table you need to create following hibernate mapping files.

Student.hbm.xls to create the student table

<?xml version=”1.0″?>

<!DOCTYPE hibernate-mapping PUBLIC “-//Hibernate/Hibernate Mapping DTD 3.0//EN” “http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd”>

<hibernate-mapping>

<class name=”com.helical.demo.Student” table=”STUDENT”>

<meta attribute=”class-description”>This class contains student details.</meta>

<id name=”studentId” type=”long” column=”STUDENT_ID”>

<generator class=”native” />

</id>

<property name=”studentName” type=”string” not-null=”true” length=”100″ column=”STUDENT_NAME” />

<many-to-one name=”studentAddress” class=”com.helical.demo.Address” column=”STUDENT_ADDRESS” not-null=”true” cascade=”all” unique=”true” />

</class>

</hibernate-mapping>

We use the many-to-one element to create the one-to-one relationship between the Student and Address entities. We do this my making the STUDENT_ADDRESS column unique in the STUDENT table.

 

Address.hbm.xml is used to create the ADDRESS table.

 

<?xml version=”1.0″?>

<!DOCTYPE hibernate-mapping PUBLIC “-//Hibernate/Hibernate Mapping DTD 3.0//EN” http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd”>

<hibernate-mapping>

<class name=”com.helical.demo.Address” table=”ADDRESS”>

<meta attribute=”class-description”>This class contains the student’s address details.</meta>

<id name=”addressId” type=”long” column=”ADDRESS_ID”>

<generator class=”native” />

</id>

<property name=”street” column=”ADDRESS_STREET” type=”string” length=”250″ />

<property name=”city” column=”ADDRESS_CITY” type=”string” length=”50″ />

<property name=”state” column=”ADDRESS_STATE” type=”string” length=”50″ />

<property name=”zipcode” column=”ADDRESS_ZIPCODE” type=”string” length=”10″ />

</class>

</hibernate-mapping>

 

Now create the hibernate configuration file and add the mapping files.

 

<?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.hsqldb.jdbcDriver </property>

<property name=”hibernate.connection.url”> jdbc:hsqldb:hsql://localhost<;/property>

<property name=”hibernate.connection.username”>sa</property>

<property name=”connection.password”></property>

<property name=”connection.pool_size”>1</property>

<property name=”hibernate.dialect”> org.hibernate.dialect.HSQLDialect </property>

<property name=”show_sql”>true</property>

<property name=”hbm2ddl.auto”>create-drop</property>

<mapping resource=”com/helical/demo/Student.hbm.xml”/>

<mapping resource=”com/helical/demo/Address.hbm.xml”/>

</session-factory>

</hibernate-configuration>

 

Create persistence classes as below. These classes should have the default constructor as well as getter and setter methods for their properties.

 

package com.helical.demo

/**

* This class contains student details.

*/

public class Student implements java.io.Serializable {

 

private long studentId;

private String studentName;

private Address studentAddress;

 

public Student() {

}

 

public Student(String studentName, Address studentAddress) {

this.studentName = studentName;

this.studentAddress = studentAddress;

}

 

public long getStudentId() {

return this.studentId;

}

 

public void setStudentId(long studentId) {

this.studentId = studentId;

}

 

public String getStudentName() {

return this.studentName;

}

 

public void setStudentName(String studentName) {

this.studentName = studentName;

}

 

public Address getStudentAddress() {

return this.studentAddress;

}

 

public void setStudentAddress(Address studentAddress) {

this.studentAddress = studentAddress;

}

}

 

package com.helical.demo

 

/**

* This class contains the student’s address details.

 

*/

public class Address implements java.io.Serializable {

private long addressId;

private String street;

private String city;

private String state;

private String zipcode;

 

public Address() {

}

 

public Address(String street, String city, String state, String zipcode) {

this.street = street;

this.city = city;

this.state = state;

this.zipcode = zipcode;

}

public long getAddressId() {

return this.addressId;

}

public void setAddressId(long addressId) {

this.addressId = addressId;

}

public String getStreet() {

return this.street;

}

 

public void setStreet(String street) {

this.street = street;

}

public String getCity() {

return this.city;

}

 

public void setCity(String city) {

this.city = city;

}

 

public String getState() {

return this.state;

}

public void setState(String state) {

this.state = state;

}

public String getZipcode() {

return this.zipcode;

}

public void setZipcode(String zipcode) {

this.zipcode = zipcode;

}

}

 

Create the main class and run the application

 

package com.helical.demo;

import org.hibernate.HibernateException;

 

import org.hibernate.Session;

 

import org.hibernate.Transaction;

 

public class Main {

 

public static void main(String[] args) {

Session session = HibernateUtil.getSessionFactory().openSession();

Transaction transaction = null;

try {

transaction = session.beginTransaction();

Address address1 = new Address(“Tipu Road”, “Mysore”, “Karnataka”, “580019”);

Address address2 = new Address(“Shanti Nagar”, “Banglore”, “Karnataka”, “560000”);

Student student1 = new Student(“Elwin”, address1);

Student student2 = new Student(“Narayan”, address2);

session.save(student1);

session.save(student2);

transaction.commit();

} catch (HibernateException e) {

transaction.rollback();

e.printStackTrace();

} finally {

session.close();

}

}

}

Leave a Reply