Hibernate one to one mapping example [Annotation]
UPDATED: 13 June 2017
Tags:
Hibernate
,
one-to-one
We all understand one-to-one relation in database but when it comes to Hibernate I always stuck at which annotation to use and where should I place it?
We are going to understand the hibernate one-to-one relationship on following table structure.
- country table holds the one-to-one relationship with languages table. Where relationship id resides in country table.
- country table holds the one-to-one relationship with capital table. Where relationship id resides in capital table.
Before we see the complete code, lets first understand how to define relationship in code.
Country.java (country - languages)
Capital.java (country - capital)
Source code (Country.java)
Source code (Language.java)
Source code (Capital.java)
Source code (OneToOneMappingExample.java)
Output
We are going to understand the hibernate one-to-one relationship on following table structure.
- country table holds the one-to-one relationship with languages table. Where relationship id resides in country table.
- country table holds the one-to-one relationship with capital table. Where relationship id resides in capital table.
Before we see the complete code, lets first understand how to define relationship in code.
Country.java (country - languages)
Capital.java (country - capital)
Source code (Country.java)
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
/**
* @author javaQuery
* @date 11th April, 2017
* @Github: https://github.com/javaquery/Examples
*/
@Entity
@Table(name = "country")
public class Country implements Serializable {
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "country")
private Capital capital;
@OneToOne
@JoinColumn(name = "primary_language_id", referencedColumnName = "id")
private Language language;
//getter-setter
}
Source code (Language.java)
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* @author javaQuery
* @date 1th April, 2017
* @Github: https://github.com/javaquery/Examples
*/
@Entity
@Table(name = "languages")
public class Language implements Serializable{
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@Column(name = "language")
private String language;
//getter-setter
}
Source code (Capital.java)
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
/**
* @author javaQuery
* @date 11th April, 2017
* @Github: https://github.com/javaquery/Examples
*/
@Entity
@Table(name = "capital")
public class Capital implements Serializable{
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@OneToOne
@JoinColumn(referencedColumnName = "id", name = "country_id")
private Country country;
//getter-setter
}
Source code (OneToOneMappingExample.java)
import com.javaquery.bean.Country;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* @author javaQuery
* @date 11th April, 2017
* @Github: https://github.com/javaquery/Examples
*/
public class OneToOneMappingExample {
public static void main(String[] args) {
try {
/* Create hibernate configuration. */
Configuration configuration = new Configuration();
configuration.configure("com\\javaquery\\database\\hibernate\\hibernate.cfg.xml");
/* Open session and begin database transaction for database operation. */
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Country country = session.load(Country.class, 1L);
System.out.println(country);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Output
Hibernate:
select
country0_.id as id1_1_0_,
country0_.primary_language_id as primary_3_1_0_,
country0_.name as name2_1_0_,
language1_.id as id1_2_1_,
language1_.language as language2_2_1_,
capital2_.id as id1_0_2_,
capital2_.country_id as country_3_0_2_,
capital2_.name as name2_0_2_
from
country country0_
left outer join
languages language1_
on country0_.primary_language_id=language1_.id
left outer join
capital capital2_
on country0_.id=capital2_.country_id
where
country0_.id=?
Country{id=1, name=India, capital=Capital{id=2, name=Delhi}, language=Language{id=2, language=Hindi}}
Tags:
Hibernate
,
one-to-one



0 comments :