Hibernate One To One Relation Mapping Example

Create Address & Employee model classes as per the above table structure

Address.java

package com.hibernate.onetoone;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Address implements java.io.Serializable {

   
private static final long serialVersionUID = 1L;
   
@Id
    @GeneratedValue
    @Column
(name = "ADDRESSID")
   
private long addressID;
   
@Column(name = "STREET")
   
private String street;
   
@Column(name = "CITY")
   
private String city;
   
@Column(name = "STATE")
   
private String state;
   
@Column(name = "COUNTRY")
   
private String country;
   

   
public Address() {
       
super();
   
}

   
public Address(String street, String city, String state, String country) {
       
this.street = street;
       
this.city = city;
       
this.state = state;
       
this.country = country;
   
}

   
public long getAddressID() {
       
return addressID;
   
}

   
public void setAddressID(long addressID) {
       
this.addressID = addressID;
   
}
   
   

   
public String getStreet() {
       
return street;
   
}

   
public void setStreet(String street) {
       
this.street = street;
   
}

   
public String getCity() {
       
return city;
   
}

   
public void setCity(String city) {
       
this.city = city;
   
}

   
public String getState() {
       
return state;
   
}

   
public void setState(String state) {
       
this.state = state;
   
}

   
public String getCountry() {
       
return country;
   
}

   
public void setCountry(String country) {
       
this.country = country;
   
}

   
}

Employee.java

package com.hibernate.onetoone;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;



@Entity
public class Employee implements java.io.Serializable {

   
private static final long serialVersionUID = 1L;
   
   
@Id
    @GeneratedValue
    @Column
(name = "EMPLOYEEID")
   
private long employeeId;
   
@Column(name = "EMPLOYEENAME")
   
private String employeeName;
   
@OneToOne(cascade = CascadeType.ALL,fetch=FetchType.LAZY)
   
@JoinColumn(name = "EMPLOYEE_ADDRESS")
   
private Address address;

   
public Employee() {
       
super();
   
}

   
public Employee(String employeeName, Address address) {
       
this.employeeName = employeeName;
       
this.address = address;
   
}

   
public long getEmployeeId() {
       
return employeeId;
   
}

   
public void setEmployeeId(long employeeId) {
       
this.employeeId = employeeId;
   
}

   
public String getEmployeeName() {
       
return employeeName;
   
}

   
public void setEmployeeName(String employeeName) {
       
this.employeeName = employeeName;
   
}

   
public Address getAddress() {
       
return address;
   
}

   
public void setAddress(Address address) {
       
this.address = address;
   
}

   
}
@OneToOne(cascade = CascadeType.ALL,fetch=FetchType.LAZY) annotation is used for linking single record of Employee table with single record of Address table
@JoinColumn(name = "EMPLOYEE_ADDRESS") , which is connecting employee & address tables by using keyword @JoinColumn (EMPLOYEE_ADDRESS)
@Entity declares the class as an entity (i.e. a persistent POJO class)
@Table is set at the class level; it allows you to define the table, catalog, and schema names for your entity mapping. If no @Table is defined the default values are used: the unqualified class name of the entity.
@Id declares the identifier property of this entity.
@GeneratedValue annotation is used to specify the primary key generation strategy to use. If the strategy is not specified by default AUTO will be used.
@Column annotation is used to specify the details of the column to which a field or property will be mapped. If the @Column annotation is not specified by default the property name will be used as the column name.

HibernateUtil.java

package com.hibernate.onetoone;

import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;

public class HibernateUtil {

   
private static SessionFactory    sessionFactory;
   
private static ServiceRegistry    serviceRegistry;

   
public static SessionFactory createSessionFactory() {
       
Configuration configuration = new Configuration();
        configuration.configure
("/META-INF/hibernate.cfg.xml");
        serviceRegistry =
new StandardServiceRegistryBuilder().applySettings(configuration.getProperties())
               
.build();
        sessionFactory = configuration.buildSessionFactory
(serviceRegistry);
       
return sessionFactory;
   
}
}

hibernate.cfg.xml

hibernate.cfg.xml file must be under src/META-INF (Please check the screenshot(project structure)

<?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>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
        <property name="hibernate.connection.username">root</property>
        <property name="connection.password">root</property>
        <property name="connection.pool_size">1</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">create-drop</property>
        <mapping class="com.hibernate.onetoone.Employee"/>
        <mapping class="com.hibernate.onetoone.Address"/>
    </session-factory>
</hibernate-configuration>





Previous 1 2 3 Next








Your email address will not be published. Required fields are marked *