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 :