Hibernate Annotation of One To One Mapping
Employee.java
package com.lara.pojoClass;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name = "Employee")
public class Employee
{
@Id
@GeneratedValue
@Column(name = "emp_id")
private int empId;
@Column(name = "empFirstName")
private String empFirstName;
@Column(name = "empLastName")
private String empLastName;
@Column(name = "empBirthDay")
private Date empBirthDay;
@Column(name = "empCellNo")
private String empCellNo;
@OneToOne(mappedBy = "employee", cascade = CascadeType.ALL)
private EmployeeDetail empDetails;
public int getEmpId()
{
return empId;
}
public void setEmpId(int empId)
{
this.empId = empId;
}
public String getEmpFirstName()
{
return empFirstName;
}
public void setEmpFirstName(String empFirstName)
{
this.empFirstName = empFirstName;
}
public String getEmpLastName()
{
return empLastName;
}
public void setEmpLastName(String empLastName)
{
this.empLastName = empLastName;
}
public Date getEmpBirthDay()
{
return empBirthDay;
}
public void setEmpBirthDay(Date empBirthDay)
{
this.empBirthDay = empBirthDay;
}
public String getEmpCellNo()
{
return empCellNo;
}
public void setEmpCellNo(String empCellNo)
{
this.empCellNo = empCellNo;
}
public EmployeeDetail getEmpDetails()
{
return empDetails;
}
public void setEmpDetails(EmployeeDetail empDetails)
{
this.empDetails = empDetails;
}
}
EmployeeDetail.java
package com.lara.pojoClass;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
@Entity
@Table(name = "EmployeeDetail")
public class EmployeeDetail
{
@Id
@Column(name = "emp_id", unique = true, nullable = false)
@GeneratedValue(generator = "gen")
@GenericGenerator(name = "gen", strategy = "foreign", parameters = @Parameter(name = "property", value = "employee"))
private int empId;
@Column(name = "houseNo")
private int houseNo;
@Column(name = "streetName")
private String streetName;
@Column(name = "cityName")
private String cityName;
@Column(name = "districtName")
private String districtName;
@Column(name = "stateName")
private String stateName;
@Column(name = "countryName")
private String countryName;
@Column(name = "pinNo")
private long pinNo;
@OneToOne
@PrimaryKeyJoinColumn
private Employee employee;
public int getEmpId()
{
return empId;
}
public void setEmpId(int empId)
{
this.empId = empId;
}
public int getHouseNo()
{
return houseNo;
}
public void setHouseNo(int houseNo)
{
this.houseNo = houseNo;
}
public String getStreetName()
{
return streetName;
}
public void setStreetName(String streetName)
{
this.streetName = streetName;
}
public String getCityName()
{
return cityName;
}
public void setCityName(String cityName)
{
this.cityName = cityName;
}
public String getDistrictName()
{
return districtName;
}
public void setDistrictName(String districtName)
{
this.districtName = districtName;
}
public String getStateName()
{
return stateName;
}
public void setStateName(String stateName)
{
this.stateName = stateName;
}
public String getCountryName()
{
return countryName;
}
public void setCountryName(String countryName)
{
this.countryName = countryName;
}
public long getPinNo()
{
return pinNo;
}
public void setPinNo(long pinNo)
{
this.pinNo = pinNo;
}
public Employee getEmployee()
{
return employee;
}
public void setEmployee(Employee employee)
{
this.employee = employee;
}
}
hibernateForMySQL.cfg.xml
<?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>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3308/dao</property>
<property name="connection.username">root</property>
<property name="connection.password">password</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">2</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Enable Hibernate's current session context -->
<property name="current_session_context_class">org.hibernate.context.ManagedSessionContext</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">false</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>
<mapping class="com.lara.pojoClass.Person"/>
<mapping class="com.lara.pojoClass.EmployeeDetail"/>
<mapping class="com.lara.pojoClass.Employee"/>
</session-factory>
</hibernate-configuration>
ManagerForOneToOne.java
package com.lara.ClientManagerClass;
import java.util.Date;
import java.util.List;
import org.hibernate.Session;
import com.lara.pojoClass.Employee;
import com.lara.pojoClass.EmployeeDetail;
import com.lara.util.HibernateUtil;
public class ManagerForOneToOne
{
public static void main(String[] args)
{
EmployeeDetail empDetail = new EmployeeDetail();
empDetail.setHouseNo(80);
empDetail.setStreetName("Co-operative Colony, Kalinga Vihar, Chhend Colony");
empDetail.setCityName("Rourkela");
empDetail.setDistrictName("Sundargarh");
empDetail.setStateName("Odisha");
empDetail.setCountryName("India");
empDetail.setPinNo(769004);
Employee emp = new Employee();
emp.setEmpFirstName("Sailendra");
emp.setEmpLastName("Jena");
emp.setEmpBirthDay(new Date(70782));
emp.setEmpCellNo("9731728407");
emp.setEmpDetails(empDetail);
empDetail.setEmployee(emp);
Session session = HibernateUtil.getAnnotationSession();
session.beginTransaction();
session.save(emp);
List<Employee> emp1 = session.createQuery("from Employee").list();
for(Employee e : emp1)
{
System.out.println("Employee First Name : "+e.getEmpFirstName());
System.out.println("Employee Last Name : "+e.getEmpLastName());
System.out.println("Employee Age : "+e.getEmpBirthDay());
System.out.println("Employee Cell Number : "+e.getEmpCellNo());
System.out.println("Employee House Number : "+e.getEmpDetails().getHouseNo());
System.out.println("Employee Street Name : "+e.getEmpDetails().getStreetName());
System.out.println("Employee City Name : "+e.getEmpDetails().getCityName());
System.out.println("Employee District Name : "+e.getEmpDetails().getDistrictName());
System.out.println("Employee State Name : "+e.getEmpDetails().getStateName());
System.out.println("Employee Country Name : "+e.getEmpDetails().getCountryName());
System.out.println("Employee Pin No : "+e.getEmpDetails().getPinNo());
}
session.getTransaction().commit();
session.flush();
session.close();
}
}
HibernateUtil.java
package com.lara.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
public class HibernateUtil
{
public static Session getSession()
{
Configuration config = new Configuration();
config.configure("com/lara/hibernateConfigurationFiles/hibernateForMySQL.cfg.xml");
SessionFactory sf = config.buildSessionFactory();
return sf.openSession();
}
public static Session getAnnotationSession()
{
AnnotationConfiguration anotConfig = new AnnotationConfiguration();
anotConfig.configure("com/lara/hibernateConfigurationFiles/hibernateForMySQL.cfg.xml");
SessionFactory sf = anotConfig.buildSessionFactory();
return sf.openSession();
}
}
Employee.java
package com.lara.pojoClass;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name = "Employee")
public class Employee
{
@Id
@GeneratedValue
@Column(name = "emp_id")
private int empId;
@Column(name = "empFirstName")
private String empFirstName;
@Column(name = "empLastName")
private String empLastName;
@Column(name = "empBirthDay")
private Date empBirthDay;
@Column(name = "empCellNo")
private String empCellNo;
@OneToOne(mappedBy = "employee", cascade = CascadeType.ALL)
private EmployeeDetail empDetails;
public int getEmpId()
{
return empId;
}
public void setEmpId(int empId)
{
this.empId = empId;
}
public String getEmpFirstName()
{
return empFirstName;
}
public void setEmpFirstName(String empFirstName)
{
this.empFirstName = empFirstName;
}
public String getEmpLastName()
{
return empLastName;
}
public void setEmpLastName(String empLastName)
{
this.empLastName = empLastName;
}
public Date getEmpBirthDay()
{
return empBirthDay;
}
public void setEmpBirthDay(Date empBirthDay)
{
this.empBirthDay = empBirthDay;
}
public String getEmpCellNo()
{
return empCellNo;
}
public void setEmpCellNo(String empCellNo)
{
this.empCellNo = empCellNo;
}
public EmployeeDetail getEmpDetails()
{
return empDetails;
}
public void setEmpDetails(EmployeeDetail empDetails)
{
this.empDetails = empDetails;
}
}
EmployeeDetail.java
package com.lara.pojoClass;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
@Entity
@Table(name = "EmployeeDetail")
public class EmployeeDetail
{
@Id
@Column(name = "emp_id", unique = true, nullable = false)
@GeneratedValue(generator = "gen")
@GenericGenerator(name = "gen", strategy = "foreign", parameters = @Parameter(name = "property", value = "employee"))
private int empId;
@Column(name = "houseNo")
private int houseNo;
@Column(name = "streetName")
private String streetName;
@Column(name = "cityName")
private String cityName;
@Column(name = "districtName")
private String districtName;
@Column(name = "stateName")
private String stateName;
@Column(name = "countryName")
private String countryName;
@Column(name = "pinNo")
private long pinNo;
@OneToOne
@PrimaryKeyJoinColumn
private Employee employee;
public int getEmpId()
{
return empId;
}
public void setEmpId(int empId)
{
this.empId = empId;
}
public int getHouseNo()
{
return houseNo;
}
public void setHouseNo(int houseNo)
{
this.houseNo = houseNo;
}
public String getStreetName()
{
return streetName;
}
public void setStreetName(String streetName)
{
this.streetName = streetName;
}
public String getCityName()
{
return cityName;
}
public void setCityName(String cityName)
{
this.cityName = cityName;
}
public String getDistrictName()
{
return districtName;
}
public void setDistrictName(String districtName)
{
this.districtName = districtName;
}
public String getStateName()
{
return stateName;
}
public void setStateName(String stateName)
{
this.stateName = stateName;
}
public String getCountryName()
{
return countryName;
}
public void setCountryName(String countryName)
{
this.countryName = countryName;
}
public long getPinNo()
{
return pinNo;
}
public void setPinNo(long pinNo)
{
this.pinNo = pinNo;
}
public Employee getEmployee()
{
return employee;
}
public void setEmployee(Employee employee)
{
this.employee = employee;
}
}
hibernateForMySQL.cfg.xml
<?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>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3308/dao</property>
<property name="connection.username">root</property>
<property name="connection.password">password</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">2</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Enable Hibernate's current session context -->
<property name="current_session_context_class">org.hibernate.context.ManagedSessionContext</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">false</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>
<mapping class="com.lara.pojoClass.Person"/>
<mapping class="com.lara.pojoClass.EmployeeDetail"/>
<mapping class="com.lara.pojoClass.Employee"/>
</session-factory>
</hibernate-configuration>
ManagerForOneToOne.java
package com.lara.ClientManagerClass;
import java.util.Date;
import java.util.List;
import org.hibernate.Session;
import com.lara.pojoClass.Employee;
import com.lara.pojoClass.EmployeeDetail;
import com.lara.util.HibernateUtil;
public class ManagerForOneToOne
{
public static void main(String[] args)
{
EmployeeDetail empDetail = new EmployeeDetail();
empDetail.setHouseNo(80);
empDetail.setStreetName("Co-operative Colony, Kalinga Vihar, Chhend Colony");
empDetail.setCityName("Rourkela");
empDetail.setDistrictName("Sundargarh");
empDetail.setStateName("Odisha");
empDetail.setCountryName("India");
empDetail.setPinNo(769004);
Employee emp = new Employee();
emp.setEmpFirstName("Sailendra");
emp.setEmpLastName("Jena");
emp.setEmpBirthDay(new Date(70782));
emp.setEmpCellNo("9731728407");
emp.setEmpDetails(empDetail);
empDetail.setEmployee(emp);
Session session = HibernateUtil.getAnnotationSession();
session.beginTransaction();
session.save(emp);
List<Employee> emp1 = session.createQuery("from Employee").list();
for(Employee e : emp1)
{
System.out.println("Employee First Name : "+e.getEmpFirstName());
System.out.println("Employee Last Name : "+e.getEmpLastName());
System.out.println("Employee Age : "+e.getEmpBirthDay());
System.out.println("Employee Cell Number : "+e.getEmpCellNo());
System.out.println("Employee House Number : "+e.getEmpDetails().getHouseNo());
System.out.println("Employee Street Name : "+e.getEmpDetails().getStreetName());
System.out.println("Employee City Name : "+e.getEmpDetails().getCityName());
System.out.println("Employee District Name : "+e.getEmpDetails().getDistrictName());
System.out.println("Employee State Name : "+e.getEmpDetails().getStateName());
System.out.println("Employee Country Name : "+e.getEmpDetails().getCountryName());
System.out.println("Employee Pin No : "+e.getEmpDetails().getPinNo());
}
session.getTransaction().commit();
session.flush();
session.close();
}
}
HibernateUtil.java
package com.lara.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
public class HibernateUtil
{
public static Session getSession()
{
Configuration config = new Configuration();
config.configure("com/lara/hibernateConfigurationFiles/hibernateForMySQL.cfg.xml");
SessionFactory sf = config.buildSessionFactory();
return sf.openSession();
}
public static Session getAnnotationSession()
{
AnnotationConfiguration anotConfig = new AnnotationConfiguration();
anotConfig.configure("com/lara/hibernateConfigurationFiles/hibernateForMySQL.cfg.xml");
SessionFactory sf = anotConfig.buildSessionFactory();
return sf.openSession();
}
}
