Nearby lessons

19 of 19

Hibernate - Inheritance Mapping (Table Per Subclass)

📌 What You Will Learn
  • Understand Hibernate - Inheritance Mapping (Table Per Subclass)
  • See working code examples
  • Learn from common mistakes and Q&A

Learn Hibernate - Inheritance Mapping (Table Per Subclass) step by step — simple explanations, complete programs with their output, common beginner mistakes, and exam-style MCQs.

Inheritance Mapping (Table Per Subclass) — Account.java

  • sa.setSbranch("CS");
  • sa.setSmarks(77);
  • EmployeeAccount ea = new EmployeeAccount();
  • ea.setAccNo("a2");
  • ea.setAccName("BBB");
  • ea.setAccType("Savings");
  • ea.setEid("E1");
  • ea.setEsal(5000);
  • ea.setEaddr("Hyd");
  • Transaction tx = session.beginTransaction();
  • session.save(sa);
  • session.save(ea);
  • tx.commit();
  • System.out.println("Student Account Inserted Successfully");
  • System.out.println("Employee Account Inserted Successfully");

EXAMPLE:

Example01
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4public class Account {
5private String accNo;
6private String accName;
7private String accType;
8 
9public String getAccNo() {
10 return accNo;
11}
12public void setAccNo(String accNo) {
13this.accNo = accNo;
14}
15public String getAccName() {
16return accName;
17}
18public void setAccName(String accName) {
19this.accName = accName;
20}
21public String getAccType() {
22return accType;
23}
24public void setAccType(String accType) {
25this.accType = accType;
26}
27 
28 
29}
30

Inheritance Mapping (Table Per Subclass) — StudentAccount.java

Example02
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4public class StudentAccount extends Account{
5private String sid;
6private String sbranch;
7private int smarks;
8 
9public String getSid() {
10 return sid;
11}
12public void setSid(String sid) {
13this.sid = sid;
14}
15public String getSbranch() {
16return sbranch;
17}
18public void setSbranch(String sbranch) {
19this.sbranch = sbranch;
20}
21public int getSmarks() {
22return smarks;
23}
24public void setSmarks(int smarks) {
25this.smarks = smarks;
26}
27 
28 
29}
30

Inheritance Mapping (Table Per Subclass) — EmployeeAccount.java

Example03
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4public class EmployeeAccount extends Account{
5private String eid;
6private float esal;
7private String eaddr;
8 
9public String getEid() {
10 return eid;
11}
12public void setEid(String eid) {
13this.eid = eid;
14}
15public float getEsal() {
16return esal;
17}
18public void setEsal(float esal) {
19this.esal = esal;
20}
21public String getEaddr() {
22return eaddr;
23}
24public void setEaddr(String eaddr) {
25this.eaddr = eaddr;
26}
27 
28}
29

Inheritance Mapping (Table Per Subclass) — Account.hbm.xml

Example04
JCode Cell
1 
2<?xml version="1.0" encoding="UTF-8"?>
3<!DOCTYPE hibernate-mapping PUBLIC
4"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
6<hibernate-mapping>
7<class name="com.durgasoft.pojo.Account" table="account">
8 <id name="accNo" column="ACCNO"/>
9 <discriminator column="TYPE" type="string"/>
10 <property name="accName" column="ACCNAME"/>
11<property name="accType" column="ACCTYPE"/>
12 
13<subclass name="com.durgasoft.pojo.StudentAccount" discriminator-value="std">
14 <property name="sid" column="SID"/>
15 <property name="sbranch" column="SBRANCH"/>
16 <property name="smarks" column="SMARKS"/>
17</subclass>
18 
19<subclass name="com.durgasoft.pojo.EmployeeAccount" discriminator-value="emp">
20 <property name="eid" column="EID"/>
21 <property name="esal" column="ESAL"/>
22 <property name="eaddr" column="EADDR"/>
23</subclass>
24</class>
25</hibernate-mapping>
26

Inheritance Mapping (Table Per Subclass) — hibernate.cfg.xml

Example05
JCode Cell
1 
2<?xml version="1.0" encoding="UTF-8"?>
3<!DOCTYPE hibernate-configuration PUBLIC
4"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
6<hibernate-configuration>
7<session-factory>
8 <property name="connection.driver_Class">oracle.jdbc.OracleDriver</property>
9 <property name="connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
10 <property name="connection.user">system</property>
11<property name="connection.password">durga</property>
12<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
13<property name="show_Sql">true</property>
14<mapping resource="Account.hbm.xml"/>
15</session-factory>
16</hibernate-configuration>
17

Inheritance Mapping (Table Per Subclass) — Test.java

Example06
JCode Cell
1 
2package com.durgasoft.test;
3 
4import org.hibernate.Session;
5import org.hibernate.SessionFactory;
6import org.hibernate.Transaction;
7import org.hibernate.boot.registry.StandardServiceRegistry;
8import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
9import org.hibernate.cfg.Configuration;
10 
11import com.durgasoft.pojo.EmployeeAccount;
12import com.durgasoft.pojo.StudentAccount;
13 
14public class Test {
15 
16public static void main(String[] args)throws Exception {
17Configuration cfg = new Configuration();
18cfg.configure();
19StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
20builder = builder.applySettings(cfg.getProperties());
21StandardServiceRegistry registry = builder.build();
22SessionFactory factory = cfg.buildSessionFactory(registry);
23Session session = factory.openSession();
24 
25StudentAccount sa = new StudentAccount();
26sa.setAccNo("a1");
27sa.setAccName("AAA");
28sa.setAccType("Savings");
29sa.setSid("S1");
30sa.setSbranch("CS");
31sa.setSmarks(77);
32 
33EmployeeAccount ea = new EmployeeAccount();
34ea.setAccNo("a2");
35ea.setAccName("BBB");
36ea.setAccType("Savings");
37ea.setEid("E1");
38ea.setEsal(5000);
39ea.setEaddr("Hyd");
40 
41Transaction tx = session.beginTransaction();
42session.save(sa);
43session.save(ea);
44tx.commit();
45System.out.println("Student Account Inserted Successfully");
46System.out.println("Employee Account Inserted Successfully");
47}
48}
49

Inheritance Mapping (Table Per Subclass) — Account.java

To represent Table Per Class Inheritance Mapping javax.persistence package has provided the following three Annotations.

1) @Inheritance 2) @DiscriminatorColumn 3) @DiscriminatorValue

1) @Inheritance

 This annotation is able to specify Inheritance Mapping strategy. @Inheritance(strategy=value) Where value may be SINGLE_TABLE constant from InheritanceType enum.

EX: @INheritance(strategy=InheritanceType.SINGLE_TABLE)

2) @DiscriminatorColumn  This annotation is able to represent Discriminator Column. @DiscriminatorColumn(name ="--") Where "name" is able to take discriminator column name.

EX: @DiscriminatorColumn(name="TYPE")

Note: The above two annotations must be used at super class. 3) @DiscriminatorValue

 It able to provide value to the discriminator column, it must be specified at sub class

Example:

Example07
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4import javax.persistence.Column;
5import javax.persistence.DiscriminatorColumn;
6import javax.persistence.Entity;
7import javax.persistence.Id;
8import javax.persistence.Inheritance;
9import javax.persistence.InheritanceType;
10import javax.persistence.Table;
11 
12@Entity
13@Table(name="account")
14@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
15@DiscriminatorColumn(name="TYPE")
16public class Account {
17@Id
18@Column(name="ACCNO")
19private String accNo;
20@Column(name="ACCNAME")
21private String accName;
22@Column(name="ACCTYPE")
23private String accType;
24 
25public String getAccNo() {
26return accNo;
27}
28public void setAccNo(String accNo) {
29this.accNo = accNo;
30}
31public String getAccName() {
32return accName;
33}
34public void setAccName(String accName) {
35this.accName = accName;
36}
37public String getAccType() {
38return accType;
39}
40public void setAccType(String accType) {
41this.accType = accType;
42}
43 
44 
45}
46

Inheritance Mapping (Table Per Subclass) — StudentAccount.java

Example08
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4import javax.persistence.Column;
5import javax.persistence.DiscriminatorValue;
6import javax.persistence.Entity;
7 
8@Entity
9@DiscriminatorValue("std")
10public class StudentAccount extends Account{
11@Column(name="SID")
12private String sid;
13@Column(name="SBRANCH")
14private String sbranch;
15@Column(name="SMARKS")
16private int smarks;
17 
18public String getSid() {
19return sid;
20}
21public void setSid(String sid) {
22this.sid = sid;
23}
24public String getSbranch() {
25return sbranch;
26}
27public void setSbranch(String sbranch) {
28this.sbranch = sbranch;
29}
30public int getSmarks() {
31return smarks;
32}
33public void setSmarks(int smarks) {
34this.smarks = smarks;
35}
36 
37 
38}
39

Inheritance Mapping (Table Per Subclass) — EmployeeAccount.java

Example09
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4import javax.persistence.Column;
5import javax.persistence.DiscriminatorValue;
6import javax.persistence.Entity;
7 
8@Entity
9@DiscriminatorValue("emp")
10public class EmployeeAccount extends Account{
11@Column(name="EID")
12private String eid;
13@Column(name="ESAL")
14private float esal;
15@Column(name="EADDR")
16private String eaddr;
17 
18public String getEid() {
19return eid;
20}
21public void setEid(String eid) {
22this.eid = eid;
23}
24public float getEsal() {
25return esal;
26}
27public void setEsal(float esal) {
28this.esal = esal;
29}
30public String getEaddr() {
31return eaddr;
32}
33public void setEaddr(String eaddr) {
34this.eaddr = eaddr;
35}
36 
37 
38}
39

Inheritance Mapping (Table Per Subclass) — hibernate.cfg.xml

Example10
JCode Cell
1 
2<?xml version="1.0" encoding="UTF-8"?>
3<!DOCTYPE hibernate-configuration PUBLIC
4"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
6<hibernate-configuration>
7<session-factory>
8 <property name="connection.driver_Class">oracle.jdbc.OracleDriver</property>
9 <property name="connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
10 <property name="connection.user">system</property>
11<property name="connection.password">durga</property>
12<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
13<property name="show_Sql">true</property>
14<mapping class="com.durgasoft.pojo.StudentAccount"/>
15<mapping class="com.durgasoft.pojo.EmployeeAccount"/>
16</session-factory>
17</hibernate-configuration>
18

Inheritance Mapping (Table Per Subclass) — Test.java

Example11
JCode Cell
1 
2package com.durgasoft.test;
3 
4import org.hibernate.Session;
5import org.hibernate.SessionFactory;
6import org.hibernate.Transaction;
7import org.hibernate.boot.registry.StandardServiceRegistry;
8import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
9import org.hibernate.cfg.Configuration;
10 
11import com.durgasoft.pojo.Account;
12import com.durgasoft.pojo.EmployeeAccount;
13import com.durgasoft.pojo.StudentAccount;
14 
15public class Test {
16 
17public static void main(String[] args)throws Exception {
18Configuration cfg = new Configuration();
19cfg.configure();
20StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
21builder = builder.applySettings(cfg.getProperties());
22StandardServiceRegistry registry = builder.build();
23SessionFactory factory = cfg.buildSessionFactory(registry);
24Session session = factory.openSession();
25 
26StudentAccount sa = (StudentAccount)session.get(Account.class, "a1");
27System.out.println("Student Account Details");
28System.out.println("------------------------------");
29System.out.println("Account Number :"+sa.getAccNo());
30System.out.println("Account Name :"+sa.getAccName());
31System.out.println("Account Type :"+sa.getAccType());
32System.out.println("Student Id :"+sa.getSid());
33System.out.println("Student Branch :"+sa.getSbranch());
34System.out.println("Student Marks :"+sa.getSmarks());
35 
36EmployeeAccount ea = (EmployeeAccount)session.get(Account.class, "a2");
37System.out.println("Employee Account Details");
38System.out.println("------------------------------");
39System.out.println("Account Number :"+ea.getAccNo());
40System.out.println("Account Name :"+ea.getAccName());
41System.out.println("Account Type :"+ea.getAccType());
42System.out.println("EmployeeId :"+ea.getEid());
43System.out.println("EmployeeSalary :"+ea.getEsal());
44System.out.println("Employee Address :"+ea.getEaddr());
45 
46session.close();
47factory.close();
48 
49}
50 
51}
52

Table Per Sub class — Payment.java

 In case of "Table Per Subclass" inheritance mapping, we have to prepare a seperate table for each and every class[for both super class and sub classses] existed in inheritance.

 While preparing tables for sub classes we have to provide a join column which must be primary key in super class respective table and in sub class respectiove tables.

 In hibernate applications, if we store sub class objects in database then Hibernate software has to recognize and store super class properties data in super class respective table and sub class respective data in sub class respectgive tables.  To achieve this requirement, Hibernate software has to recognize super class properties

and sub class properties seperately, for this we have to provide sub classes configuration seperatly in hibernate mapping file.  To provide "Table Per Subclass" inheritance mapping we have to use the following xml tags in mapping file.

  • <hibernate-mapping>
  • <class name="--" table="--"
  • <joined-subclass name="--" table="--">
  • <key column="--"/>
  • </join-subclass>
  • </class>
  • </hibernate-mapping>

 Where "<joined-subclass>" tag is able to configure sub class, where "name" attribute will take fully qualified name of the respective sub class and "table" attribute will take sub class respective table name.

 Where "<key>" tag is able to take join key which is available in sub class respective table.

Example:

Example12
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4public class Payment {
5private String tx_Id;
6private String payment_Date;
7private long payment_Amt;
8 
9public String getTx_Id() {
10 return tx_Id;
11}
12public void setTx_Id(String tx_Id) {
13this.tx_Id = tx_Id;
14}
15public String getPayment_Date() {
16return payment_Date;
17}
18public void setPayment_Date(String payment_Date) {
19this.payment_Date = payment_Date;
20}
21public long getPayment_Amt() {
22return payment_Amt;
23}
24public void setPayment_Amt(long payment_Amt) {
25this.payment_Amt = payment_Amt;
26}
27 
28 
29}
30

Table Per Sub class — CardPayment.java

Example13
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4public class CardPayment extends Payment {
5private int card_No;
6private String expr_Date;
7 
8public int getCard_No() {
9 return card_No;
10}
11public void setCard_No(int card_No) {
12this.card_No = card_No;
13}
14public String getExpr_Date() {
15return expr_Date;
16}
17public void setExpr_Date(String expr_Date) {
18this.expr_Date = expr_Date;
19}
20 
21 
22}
23

Table Per Sub class — ChequePayment.java

Example14
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4public class ChequePayment extends Payment {
5private int cheque_No;
6private String accNo;
7 
8public int getCheque_No() {
9 return cheque_No;
10}
11public void setCheque_No(int cheque_No) {
12this.cheque_No = cheque_No;
13}
14public String getAccNo() {
15return accNo;
16}
17public void setAccNo(String accNo) {
18this.accNo = accNo;
19}
20 
21 
22}
23

Table Per Sub class — payment.hbm.xml

Example15
JCode Cell
1 
2<?xml version="1.0" encoding="UTF-8"?>
3<!DOCTYPE hibernate-mapping PUBLIC
4"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
6<hibernate-mapping>
7<class name="com.durgasoft.pojo.Payment" table="payment">
8 <id name="tx_Id" column="TX_ID"/>
9 <property name="payment_Date" column="PAY_DATE"/>
10 <property name="payment_Amt" column="PAY_AMT"/>
11 
12<joined-subclass name="com.durgasoft.pojo.CardPayment" table="card_payment">
13 <key column="TX_ID"/>
14 <property name="card_No" column="CARD_NO"/>
15 <property name="expr_Date" column="EXPR_DATE"/>
16</joined-subclass>
17<joined-subclass name="com.durgasoft.pojo.ChequePayment" table="cheque_payment">
18 <key column="TX_ID"/>
19 <property name="cheque_No" column="CHEQUE_NO"/>
20 <property name="accNo" column="ACC_NO"/>
21</joined-subclass>
22</class>
23</hibernate-mapping>
24

Table Per Sub class — hibernate.cfg.xml

Example16
JCode Cell
1 
2<?xml version="1.0" encoding="UTF-8"?>
3<!DOCTYPE hibernate-configuration PUBLIC
4"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
6<hibernate-configuration>
7<session-factory>
8 <property name="connection.driver_Class">oracle.jdbc.OracleDriver</property>
9 <property name="connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
10 <property name="connection.user">system</property>
11<property name="connection.password">durga</property>
12<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
13<property name="show_Sql">true</property>
14<mapping resource="payment.hbm.xml"/>
15</session-factory>
16</hibernate-configuration>
17

Table Per Sub class — Test.java

Example17
JCode Cell
1 
2package com.durgasoft.test;
3 
4import org.hibernate.Session;
5import org.hibernate.SessionFactory;
6import org.hibernate.Transaction;
7import org.hibernate.boot.registry.StandardServiceRegistry;
8import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
9import org.hibernate.cfg.Configuration;
10 
11import com.durgasoft.pojo.CardPayment;
12import com.durgasoft.pojo.ChequePayment;
13 
14public class Test {
15 
16public static void main(String[] args)throws Exception {
17Configuration cfg = new Configuration();
18cfg.configure();
19StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
20builder = builder.applySettings(cfg.getProperties());
21StandardServiceRegistry registry = builder.build();
22SessionFactory factory = cfg.buildSessionFactory(registry);
23Session session = factory.openSession();
24 
25CardPayment card_Payment = new CardPayment();
26card_Payment.setTx_Id("t111");
27card_Payment.setPayment_Date("16/3/18");
28card_Payment.setPayment_Amt(5000);
29card_Payment.setCard_No(1234);
30card_Payment.setExpr_Date("12/12/20");
31 
32ChequePayment cheque_Payment = new ChequePayment();
33cheque_Payment.setTx_Id("t222");
34cheque_Payment.setPayment_Date("17/3/18");
35cheque_Payment.setPayment_Amt(7000);
36cheque_Payment.setCheque_No(2345);
37cheque_Payment.setAccNo("a222");
38 
39Transaction tx = session.beginTransaction();
40session.save(card_Payment);
41session.save(cheque_Payment);
42tx.commit();
43System.out.println("Card Payment Stored Successfully");
44System.out.println("Cheque Payment Stored Successfully");
45}
46}
47

Table Per Sub class — Payment.java

Note: The above application required the followeing database

SQL> desc payment;

Name Null? Type

TX_ID NOT NULL VARCHAR2(5)

PAY_DATE VARCHAR2(10)

PAY_AMT

SQL> desc card_payment;

Name Null? Type

TX_ID NOT NULL VARCHAR2(5)

CARD_NO NUMBER(8)

EXPR_DATE VARCHAR2(10)

SQL> desc cheque_payment;

Name Null? Type

TX_ID NOT NULL VARCHAR2(5)

CHEQUE_NO NUMBER(8)

ACC_NO VARCHAR2(10)

SQL>

To represent "Table Per Subclass" inheritance mapping mechanism, javax.persistence package has provided the following Annotations

1) @Inheritance 2) @PrimaryKeyJoinColumn

1) @Inheritance

 This annotation is able to represent a particular Inheritance mapping mechanism,it will use "strategy" member to take a particular inheritance mapping, where "strategy" attribvute will take "JOINED" value constant from "InheritanceType" enum.

EX: @Inheritance(strategy=IOnheritanceType.JOINED) 2) @PrimaryKeyJoinColumn

 This annotation will be used at sub classes inorder to provide Join Key column name. It will use "name" attribute to provide "join key column".

EX: @PrimaryKeyJoinColumn(name="TX_ID")

Example:

Example18
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4import javax.persistence.Column;
5import javax.persistence.Entity;
6import javax.persistence.Id;
7import javax.persistence.Inheritance;
8import javax.persistence.InheritanceType;
9import javax.persistence.Table;
10 
11@Entity
12@Table(name="payment")
13@Inheritance(strategy=InheritanceType.JOINED)
14public class Payment {
15@Id
16@Column(name="TX_ID")
17private String tx_Id;
18@Column(name="PAY_DATE")
19private String payment_Date;
20@Column(name="PAY_AMT")
21private long payment_Amt;
22 
23public String getTx_Id() {
24return tx_Id;
25}
26public void setTx_Id(String tx_Id) {
27this.tx_Id = tx_Id;
28}
29public String getPayment_Date() {
30return payment_Date;
31}
32public void setPayment_Date(String payment_Date) {
33this.payment_Date = payment_Date;
34}
35public long getPayment_Amt() {
36return payment_Amt;
37}
38public void setPayment_Amt(long payment_Amt) {
39this.payment_Amt = payment_Amt;
40}
41}
42

Table Per Sub class — CardPayment.java

Example19
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4import javax.persistence.Column;
5import javax.persistence.Entity;
6import javax.persistence.PrimaryKeyJoinColumn;
7import javax.persistence.Table;
8 
9@Entity
10@Table(name="card_payment")
11@PrimaryKeyJoinColumn(name="TX_ID")
12public class CardPayment extends Payment {
13@Column(name="CARD_NO")
14private int card_No;
15@Column(name="EXPR_DATE")
16private String expr_Date;
17 
18public int getCard_No() {
19return card_No;
20}
21public void setCard_No(int card_No) {
22this.card_No = card_No;
23}
24public String getExpr_Date() {
25return expr_Date;
26}
27public void setExpr_Date(String expr_Date) {
28this.expr_Date = expr_Date;
29}
30 
31 
32}
33

Table Per Sub class — ChequePayment.java

Example20
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4import javax.persistence.Column;
5import javax.persistence.Entity;
6import javax.persistence.PrimaryKeyJoinColumn;
7import javax.persistence.Table;
8 
9@Entity
10@Table(name="cheque_payment")
11@PrimaryKeyJoinColumn(name="TX_ID")
12public class ChequePayment extends Payment {
13@Column(name="CHEQUE_NO")
14private int cheque_No;
15@Column(name="ACC_NO")
16private String accNo;
17 
18public int getCheque_No() {
19return cheque_No;
20}
21public void setCheque_No(int cheque_No) {
22this.cheque_No = cheque_No;
23}
24public String getAccNo() {
25return accNo;
26}
27public void setAccNo(String accNo) {
28this.accNo = accNo;
29}
30 
31 
32}
33

Table Per Sub class — hibernate.cfg.xml

Example21
JCode Cell
1 
2<?xml version="1.0" encoding="UTF-8"?>
3<!DOCTYPE hibernate-configuration PUBLIC
4"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
6<hibernate-configuration>
7<session-factory>
8 <property name="connection.driver_Class">oracle.jdbc.OracleDriver</property>
9 <property name="connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
10 <property name="connection.user">system</property>
11<property name="connection.password">durga</property>
12<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
13<property name="show_Sql">true</property>
14<mapping class="com.durgasoft.pojo.Payment"/>
15<mapping class="com.durgasoft.pojo.CardPayment"/>
16<mapping class="com.durgasoft.pojo.ChequePayment"/>
17</session-factory>
18</hibernate-configuration>
19

Table Per Sub class — Test.java

Example22
JCode Cell
1 
2package com.durgasoft.test;
3 
4import org.hibernate.Session;
5import org.hibernate.SessionFactory;
6import org.hibernate.Transaction;
7import org.hibernate.boot.registry.StandardServiceRegistry;
8import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
9import org.hibernate.cfg.Configuration;
10 
11import com.durgasoft.pojo.CardPayment;
12import com.durgasoft.pojo.ChequePayment;
13import com.durgasoft.pojo.Payment;
14 
15public class Test {
16 
17public static void main(String[] args)throws Exception {
18Configuration cfg = new Configuration();
19cfg.configure();
20StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
21builder = builder.applySettings(cfg.getProperties());
22StandardServiceRegistry registry = builder.build();
23SessionFactory factory = cfg.buildSessionFactory(registry);
24Session session = factory.openSession();
25 
26CardPayment card_Payment = (CardPayment)session.get(Payment.class, "t111");
27System.out.println("CardPayment Details");
28System.out.println("---------------------------");
29System.out.println("Transaction ID :"+card_Payment.getTx_Id());
30System.out.println("Payment Date :"+card_Payment.getPayment_Date());
31System.out.println("Payment Amount :"+card_Payment.getPayment_Amt());
32System.out.println("Card Number :"+card_Payment.getCard_No());
33System.out.println("Expr Date :"+card_Payment.getExpr_Date());
34System.out.println();
35 
36ChequePayment cheque_Payment = (ChequePayment)session.get(Payment.class, "t222");
37System.out.println("ChequePayment Details");
38System.out.println("---------------------------");
39System.out.println("Transaction ID :"+cheque_Payment.getTx_Id());
40System.out.println("Payment Date :"+cheque_Payment.getPayment_Date());
41System.out.println("Payment Amount :"+cheque_Payment.getPayment_Amt());
42System.out.println("Cheque Number :"+cheque_Payment.getCheque_No());
43System.out.println("Account Number :"+cheque_Payment.getAccNo());
44 
45 
46}
47}
48

Table Per Concreate Class — Person.java

In "Table per Concreate Class" inheritance mapping , we will prepare a seperate table for each and every sub class containing the columns representing both the super class properties and the respective sub class properties.

In the above context, if we save any sub class object then Hibernate software has to distribute sub class objects data in the respective table and in the respective columns. To achieve this we have to use the following xml tags in hibernate mapping file.

  • <hibernate-mapping>
  • <class name="--">
  • <union-subclass name="--" table="--">
  • <property name="--" column="--"/>
  • </union-subclass>
  • </class>
  • </hibernate-mapping>

Where "<union-subclass> tag is able to provide mapping between a particular sub class and the respective table, where "name" attribute will take sub class name and table attribute will take the respective table name.

Example:

Example23
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4public class Person {
5private String pname;
6private String paddr;
7 
8public String getPname() {
9 return pname;
10}
11public void setPname(String pname) {
12this.pname = pname;
13}
14public String getPaddr() {
15return paddr;
16}
17public void setPaddr(String paddr) {
18this.paddr = paddr;
19}
20 
21 
22}
23

Table Per Concreate Class — Employee.java

Example24
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4public class Employee extends Person {
5private String eid;
6private float esal;
7 
8public String getEid() {
9 return eid;
10}
11public void setEid(String eid) {
12this.eid = eid;
13}
14public float getEsal() {
15return esal;
16}
17public void setEsal(float esal) {
18this.esal = esal;
19}
20 
21 
22}
23

Table Per Concreate Class — Customer.java

Example25
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4public class Customer extends Person {
5private String cid;
6private String cmobile;
7 
8public String getCid() {
9 return cid;
10}
11public void setCid(String cid) {
12this.cid = cid;
13}
14public String getCmobile() {
15return cmobile;
16}
17public void setCmobile(String cmobile) {
18this.cmobile = cmobile;
19}
20 
21 
22}
23

Table Per Concreate Class — Person.hbm.xml

Example26
JCode Cell
1 
2<?xml version="1.0" encoding="UTF-8"?>
3<!DOCTYPE hibernate-mapping PUBLIC
4"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
6<hibernate-mapping>
7<class name="com.durgasoft.pojo.Person">
8 <id name="pname" column="PNAME"/>
9 <property name="paddr" column="PADDR"/>
10 <union-subclass name="com.durgasoft.pojo.Employee" table="employee">
11 <property name="eid" column="EID"/>
12 <property name="esal" column="ESAL"/>
13</union-subclass>
14<union-subclass name="com.durgasoft.pojo.Customer" table="customer">
15 <property name="cid" column="CID"/>
16 <property name="cmobile" column="CMOBILE"/>
17</union-subclass>
18</class>
19</hibernate-mapping>
20

Table Per Concreate Class — hibernate.cfg.xml

Example27
JCode Cell
1 
2<?xml version="1.0" encoding="UTF-8"?>
3<!DOCTYPE hibernate-configuration PUBLIC
4"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
6<hibernate-configuration>
7<session-factory>
8 <property name="connection.driver_Class">oracle.jdbc.OracleDriver</property>
9 <property name="connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
10 <property name="connection.user">system</property>
11<property name="connection.password">durga</property>
12<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
13<property name="show_Sql">true</property>
14<mapping resource="Person.hbm.xml"/>
15</session-factory>
16</hibernate-configuration>
17

Table Per Concreate Class — Test.java

Example28
JCode Cell
1 
2package com.durgasoft.test;
3 
4import org.hibernate.Session;
5import org.hibernate.SessionFactory;
6import org.hibernate.Transaction;
7import org.hibernate.boot.registry.StandardServiceRegistry;
8import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
9import org.hibernate.cfg.Configuration;
10 
11 
12import com.durgasoft.pojo.Customer;
13import com.durgasoft.pojo.Employee;
14 
15public class Test {
16 
17public static void main(String[] args)throws Exception {
18Configuration cfg = new Configuration();
19cfg.configure();
20StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
21builder = builder.applySettings(cfg.getProperties());
22StandardServiceRegistry registry = builder.build();
23SessionFactory factory = cfg.buildSessionFactory(registry);
24Session session = factory.openSession();
25 
26Employee emp = new Employee();
27emp.setPname("AAA");
28emp.setPaddr("Hyd");
29emp.setEid("E-111");
30emp.setEsal(5000);
31 
32Customer cust = new Customer();
33cust.setPname("BBB");
34cust.setPaddr("Hyd");
35cust.setCid("C-111");
36cust.setCmobile("91-9988776655");
37 
38Transaction tx = session.beginTransaction();
39session.save(emp);
40session.save(cust);
41tx.commit();
42System.out.println("Employee Object Inserted Successfully");
43System.out.println("Customer Object Inserted Successfully");
44 
45session.close();
46factory.close();
47 
48}
49 
50}
51

Database — Person.java

SQL> create table employee (PNAME varchar2(10) primary key, PADDR varchar2(10), EID varchar2(5), ESAL float); SQL> commit; SQL> create table customer(PNAME varchar2(10) primary key, PADDR varchar2(10), CID varchar2(5), CMOBILE varchar2(20)); SQL> commit;

To represent this inheritance mapping mechanism we have to use @Inheritance() annotation , where we have to use "TABLE_PER_CLASS" constant from INheritanceType enum as value to 'strategy' member.

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)

Example:

Example29
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4import javax.persistence.Column;
5import javax.persistence.Entity;
6import javax.persistence.Id;
7import javax.persistence.Inheritance;
8import javax.persistence.InheritanceType;
9 
10@Entity
11@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
12public class Person {
13@Id
14@Column(name="PNAME")
15private String pname;
16@Column(name="PADDR")
17private String paddr;
18 
19public String getPname() {
20return pname;
21}
22public void setPname(String pname) {
23this.pname = pname;
24}
25public String getPaddr() {
26return paddr;
27}
28public void setPaddr(String paddr) {
29this.paddr = paddr;
30}
31 
32 
33}
34

Database — Employee.java

Example30
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4import javax.persistence.Column;
5import javax.persistence.Entity;
6import javax.persistence.Table;
7 
8@Entity
9@Table(name="employee")
10public class Employee extends Person {
11@Column(name="EID")
12private String eid;
13@Column(name="ESAL")
14private float esal;
15 
16public String getEid() {
17return eid;
18}
19public void setEid(String eid) {
20this.eid = eid;
21}
22public float getEsal() {
23return esal;
24}
25public void setEsal(float esal) {
26this.esal = esal;
27}
28 
29 
30}
31

Database — Customer.java

Example31
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4import javax.persistence.Column;
5import javax.persistence.Entity;
6import javax.persistence.Table;
7 
8@Entity
9@Table(name="customer")
10public class Customer extends Person {
11@Column(name="CID")
12private String cid;
13@Column(name="CMOBILE")
14private String cmobile;
15 
16public String getCid() {
17return cid;
18}
19public void setCid(String cid) {
20this.cid = cid;
21}
22public String getCmobile() {
23return cmobile;
24}
25public void setCmobile(String cmobile) {
26this.cmobile = cmobile;
27}
28 
29 
30}
31

Database — hibernate.cfg.xml

Example32
JCode Cell
1 
2<?xml version="1.0" encoding="UTF-8"?>
3<!DOCTYPE hibernate-configuration PUBLIC
4"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
6<hibernate-configuration>
7<session-factory>
8 <property name="connection.driver_Class">oracle.jdbc.OracleDriver</property>
9 <property name="connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
10 <property name="connection.user">system</property>
11<property name="connection.password">durga</property>
12<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
13<property name="show_Sql">true</property>
14<!-- <mapping resource="Person.hbm.xml"/> -->
15<mapping class="com.durgasoft.pojo.Person"/>
16<mapping class="com.durgasoft.pojo.Employee"/>
17<mapping class="com.durgasoft.pojo.Customer"/>
18</session-factory>
19</hibernate-configuration>
20

Database — Test.java

Example33
JCode Cell
1 
2package com.durgasoft.test;
3 
4import org.hibernate.Session;
5import org.hibernate.SessionFactory;
6import org.hibernate.Transaction;
7import org.hibernate.boot.registry.StandardServiceRegistry;
8import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
9import org.hibernate.cfg.Configuration;
10import com.durgasoft.pojo.Customer;
11import com.durgasoft.pojo.Employee;
12 
13public class Test {
14 
15public static void main(String[] args)throws Exception {
16Configuration cfg = new Configuration();
17cfg.configure();
18StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
19builder = builder.applySettings(cfg.getProperties());
20StandardServiceRegistry registry = builder.build();
21SessionFactory factory = cfg.buildSessionFactory(registry);
22Session session = factory.openSession();
23 
24Employee emp = (Employee)session.get(Employee.class, "AAA");
25Customer cust = (Customer)session.get(Customer.class, "BBB");
26 
27System.out.println("Employee Details");
28System.out.println("-----------------------");
29System.out.println("Person Name :"+emp.getPname());
30System.out.println("Person Address :"+emp.getPaddr());
31System.out.println("Employee Id :"+emp.getEid());
32System.out.println("Employee Salary:"+emp.getEsal());
33System.out.println();
34System.out.println("Customer Details");
35System.out.println("-----------------------");
36System.out.println("Person Name :"+cust.getPname());
37System.out.println("Person Address :"+cust.getPaddr());
38System.out.println("Customer Id :"+cust.getCid());
39System.out.println("Customer Mobile:"+cust.getCmobile());
40session.close();
41factory.close();
42 
43}
44 
45}
46

Association Mapping

In General, in Enterprise applications we will use both Object Oriented Data Model and Relational Data Model to represent data. In Enterprise applications we will use Object Oriented Data Model in Front-End applications toreprepsent data and we will used Relational data Model in Back-End Applications to represent Data.

In the above context, both the data models are having their own approaches to represent data, the differences between data models may provide mismatches between data models, it may reduce data persistency in Enterprise Applications.

In the above context, to improve data persistency we must use ORM implementations, Hibernate is an ORM implementation , it able to provide solutions for mismatchs between Data models. In Enterprise applications, we are able to get Associations mismatch while achieving associations in Object Oriented Data Model and in Relational Data Model.

IN Enterprise Applications, the main intention of Associations is to to improve data navigation between entities and to improve communication between entities.

In Object Oriented Data Model, we are able to achieve associations by declaring one or Collection of reference variables of an entity class in another entity class.

Example34
JCode Cell
1 
2class Account{
3}
4class Address{
5}
6 
7class Employee{
8-----
9Account acc;// one-to-one association
10-----
11Collection<Address> addr; //one-to-many
12-----
13}
14

Association Mapping

In relational Data Model, we are able to achieve associations in the following three ways.

1) By defining Primary Key-Foreign Key relations between tables 2) By Providing Join column between tables 3) By Defining Join table between tables.

To resolve the above associations mismatch between both the data models Hibernate has provided "Association Mappings".

Hibernate has provided the following four types of Associations mappings inorder to resolve Associations mismatch.

  • One-To-One Association Mapping
  • One-To-Many Association Mapping
  • Many-To-One Association Mapping
  • Many-To-Many Association Mapping

One-To-One Association Mapping — Employee.java

It is a relation between entities, where one instance of an entity should be mapped with exactly one instance of another entity. EX: Every Employee must have exactly one individual Account.

In Hibernate applications, to achieve One-To-One Associations, we have to use the following tag in mapping file.

<one-to-one name="--" class="--" cascade="--"/>

 Where "name" attribute take property name of the entity class.  Where "class" attribute will take Fully qualified name of the associated class.  Where "cascade" attribute will take the values like all, none, insert, update and delete

inorder to perform operations in cascading style, that is, if we delete employee table automatically Account table must also be deleted.

Example:

Example36
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4public class Employee {
5private String eid;
6private String ename;
7private float esal;
8private String eaddr;
9private Account acc;
10 
11public Account getAcc() {
12return acc;
13}
14public void setAcc(Account acc) {
15this.acc = acc;
16}
17public String getEid() {
18return eid;
19}
20public void setEid(String eid) {
21this.eid = eid;
22}
23public String getEname() {
24return ename;
25}
26public void setEname(String ename) {
27this.ename = ename;
28}
29public float getEsal() {
30return esal;
31}
32public void setEsal(float esal) {
33this.esal = esal;
34}
35public String getEaddr() {
36return eaddr;
37}
38public void setEaddr(String eaddr) {
39this.eaddr = eaddr;
40}
41 
42}
43

One-To-One Association Mapping — Account.java

Example37
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4public class Account {
5private String accNo;
6private String accName;
7private String accType;
8 
9public String getAccNo() {
10 return accNo;
11}
12public void setAccNo(String accNo) {
13this.accNo = accNo;
14}
15public String getAccName() {
16return accName;
17}
18public void setAccName(String accName) {
19this.accName = accName;
20}
21public String getAccType() {
22return accType;
23}
24public void setAccType(String accType) {
25this.accType = accType;
26}
27 
28}
29

One-To-One Association Mapping — Employee.hbm.xml

Example38
JCode Cell
1 
2<?xml version="1.0" encoding="UTF-8"?>
3<!DOCTYPE hibernate-mapping PUBLIC
4"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
6<hibernate-mapping>
7<class name="com.durgasoft.pojo.Employee" table="emp1">
8 <id name="eid" column="EID" length="5"/>
9 <property name="ename" column="ENAME" length="10"/>
10 <property name="esal" column="ESAL" length="10"/>
11<property name="eaddr" column="EADDR" length="10"/>
12<one-to-one name="acc" class="com.durgasoft.pojo.Account" cascade="all"/>
13</class>
14</hibernate-mapping>
15

One-To-One Association Mapping — Account.hbm.xml

Example39
JCode Cell
1 
2<?xml version="1.0" encoding="UTF-8"?>
3<!DOCTYPE hibernate-mapping PUBLIC
4"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
6<hibernate-mapping>
7<class name="com.durgasoft.pojo.Account" table="account">
8 <id name="accNo" column="ACCNO" length="10"/>
9 <property name="accName" column="ACCNAME" length="10"/>
10 <property name="accType" column="ACCTYPE" length="10"/>
11</class>
12</hibernate-mapping>
13

One-To-One Association Mapping — hibernate.cfg.xml

Example40
JCode Cell
1 
2<?xml version="1.0" encoding="UTF-8"?>
3<!DOCTYPE hibernate-configuration PUBLIC
4"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
6<hibernate-configuration>
7<session-factory>
8 <property name="connection.driver_Class">oracle.jdbc.OracleDriver</property>
9 <property name="connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
10 <property name="connection.username">system</property>
11<property name="connection.password">durga</property>
12<property name="hibernate.hbm2ddl.auto">create</property>
13<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
14<mapping resource="Employee.hbm.xml"/>
15<mapping resource="Account.hbm.xml"/>
16</session-factory>
17</hibernate-configuration>
18

One-To-One Association Mapping — Test.java

Example41
JCode Cell
1 
2package com.durgasoft.test;
3 
4import org.hibernate.Session;
5import org.hibernate.SessionFactory;
6import org.hibernate.Transaction;
7import org.hibernate.boot.registry.StandardServiceRegistry;
8import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
9import org.hibernate.cfg.Configuration;
10 
11import com.durgasoft.pojo.Account;
12import com.durgasoft.pojo.Employee;
13 
14public class Test {
15 
16public static void main(String[] args)throws Exception {
17Configuration cfg = new Configuration();
18cfg.configure();
19StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
20builder = builder.applySettings(cfg.getProperties());
21StandardServiceRegistry registry = builder.build();
22SessionFactory sessionFactory = cfg.buildSessionFactory(registry);
23 
24Session session = sessionFactory.openSession();
25 
26Account acc = new Account();
27acc.setAccNo("abc123");
28acc.setAccName("Durga");
29acc.setAccType("Savings");
30 
31Employee emp = new Employee();
32emp.setEid("E-111");
33emp.setEname("Durga");
34emp.setEsal(25000);
35emp.setEaddr("Hyd");
36emp.setAcc(acc);
37 
38Transaction tx = session.beginTransaction();
39session.save(emp);
40tx.commit();
41System.out.println("Employee Inserted Successfully");
42session.close();
43sessionFactory.close();
44 
45}
46 
47}
48

One-To-One Association Mapping — Employee.java

In Hibernate Applications , to represent one-to-one association JPA has provided the following annotation as part of javax.persistence package.

@OneToOne(cascade=Val) Where val may be the constants like ALL, DETACH, MERGE, REFREESH, REMOVE, PERSIST from CascadeType enum.

The above annotation must be provided just before the entity reference variable in container entity or just above of the getXXX() method w.r.t the entity reference variable.

EX:

Example42
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4import javax.persistence.CascadeType;
5import javax.persistence.Column;
6import javax.persistence.Entity;
7import javax.persistence.Id;
8import javax.persistence.OneToOne;
9import javax.persistence.Table;
10 
11@Entity
12@Table(name="emp1")
13public class Employee {
14@Id
15@Column(name="EID", length=5)
16private String eid;
17@Column(name="ENAME", length=10)
18private String ename;
19@Column(name="ESAL", length=6)
20private float esal;
21@Column(name="EADDR", length=10)
22private String eaddr;
23@OneToOne(cascade=CascadeType.ALL)
24private Account acc;
25 
26public Account getAcc() {
27return acc;
28}
29public void setAcc(Account acc) {
30this.acc = acc;
31}
32public String getEid() {
33return eid;
34}
35public void setEid(String eid) {
36this.eid = eid;
37}
38public String getEname() {
39return ename;
40}
41public void setEname(String ename) {
42this.ename = ename;
43}
44public float getEsal() {
45return esal;
46}
47public void setEsal(float esal) {
48this.esal = esal;
49}
50public String getEaddr() {
51return eaddr;
52}
53public void setEaddr(String eaddr) {
54this.eaddr = eaddr;
55}
56 
57}
58

One-To-One Association Mapping — Account.java

Example43
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4import javax.persistence.Column;
5import javax.persistence.Entity;
6import javax.persistence.Id;
7import javax.persistence.Table;
8 
9@Entity
10@Table(name="account")
11public class Account {
12@Id
13@Column(name="ACCNO", length=10)
14private String accNo;
15@Column(name="ACCNAME", length=10)
16private String accName;
17@Column(name="ACCTYPE", length=10)
18private String accType;
19 
20public String getAccNo() {
21return accNo;
22}
23public void setAccNo(String accNo) {
24this.accNo = accNo;
25}
26public String getAccName() {
27return accName;
28}
29public void setAccName(String accName) {
30this.accName = accName;
31}
32public String getAccType() {
33return accType;
34}
35public void setAccType(String accType) {
36this.accType = accType;
37}
38 
39}
40

One-To-One Association Mapping — hibernate.cfg.xml

Example44
JCode Cell
1 
2<?xml version="1.0" encoding="UTF-8"?>
3<!DOCTYPE hibernate-configuration PUBLIC
4"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
6<hibernate-configuration>
7<session-factory>
8 <property name="connection.driver_Class">oracle.jdbc.OracleDriver</property>
9 <property name="connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
10 <property name="connection.username">system</property>
11<property name="connection.password">durga</property>
12<!-- <property name="hibernate.hbm2ddl.auto">create</property> -->
13<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
14<property name="show_sql">true</property>
15<mapping class="com.durgasoft.pojo.Employee"/>
16<mapping class="com.durgasoft.pojo.Account"/>
17</session-factory>
18</hibernate-configuration>
19

One-To-One Association Mapping — Test.java

Example45
JCode Cell
1 
2package com.durgasoft.test;
3 
4import org.hibernate.Session;
5import org.hibernate.SessionFactory;
6import org.hibernate.Transaction;
7import org.hibernate.boot.registry.StandardServiceRegistry;
8import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
9import org.hibernate.cfg.Configuration;
10 
11import com.durgasoft.pojo.Account;
12import com.durgasoft.pojo.Employee;
13 
14public class Test {
15 
16public static void main(String[] args)throws Exception {
17Configuration cfg = new Configuration();
18cfg.configure();
19StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
20builder = builder.applySettings(cfg.getProperties());
21StandardServiceRegistry registry = builder.build();
22SessionFactory sessionFactory = cfg.buildSessionFactory(registry);
23 
24Session session = sessionFactory.openSession();
25/*
26Account acc = new Account();
27acc.setAccNo("abc123");
28acc.setAccName("Durga");
29acc.setAccType("Savings");
30 
31Employee emp = new Employee();
32emp.setEid("E-111");
33emp.setEname("Durga");
34emp.setEsal(25000);
35emp.setEaddr("Hyd");
36emp.setAcc(acc);
37 
38Transaction tx = session.beginTransaction();
39session.save(emp);
40tx.commit();
41System.out.println("Employee Inserted Successfully");
42*/
43Employee emp = (Employee)session.get("com.durgasoft.pojo.Employee", "E-111");
44System.out.println("Employee Details");
45System.out.println("------------------------");
46System.out.println("Employee Id :"+emp.getEid());
47System.out.println("Employee Name :"+emp.getEname());
48System.out.println("Employee Salary :"+emp.getEsal());
49System.out.println("Employee Address :"+emp.getEaddr());
50 
51Account acc = emp.getAcc();
52System.out.println(acc);
53System.out.println("Account Details");
54System.out.println("---------------------");
55System.out.println("Account Number :"+acc.getAccNo());
56System.out.println("Account Name :"+acc.getAccName());
57System.out.println("Account Type :"+acc.getAccType());
58 
59session.close();
60sessionFactory.close();
61 
62}
63}
64

One-To-Many Association — Employee.java

It is a relation between entities where one instance of an entity should be mapped with multiple instances of another entity.

EX: Single Department has Multiple Employees

In Hibernate applications, to represent One-To-Many association we have to use the following tags in mapping files.

  • <hibernate-mapping>
  • <class name="--" table="--">
  • <set name="---" cascade="--">
  • <key column="---"/>
  • <one-to-many class="---"/>
  • </set>
  • </class>
  • </hibernate-mapping>

 Where <set> tag is able to represent Collection object, that is, many side in one-to-many and in many-to-many.

 Where "name" attribute is representing property name which is representing Collection.  Where "cascade" attribute will take cascade values like all, insert,....  Where <key> tag can be used to specify Join key configuration.  Where "column" attribute in <key> tag is able to join column name.  Where "<one-to-many>" tag is able to represent one-To-many association.  Where "class" attribute in <one-to-many> tag will take class name that is contained class.

Example:

Example46
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4public class Employee {
5private String eid;
6private String ename;
7private float esal;
8private String eaddr;
9 
10public Employee(String eid, String ename, float esal, String eaddr) {
11this.eid = eid;
12this.ename = ename;
13this.esal = esal;
14this.eaddr = eaddr;
15}
16 
17public String getEid() {
18return eid;
19}
20public void setEid(String eid) {
21this.eid = eid;
22}
23public String getEname() {
24return ename;
25}
26public void setEname(String ename) {
27this.ename = ename;
28}
29public float getEsal() {
30return esal;
31}
32public void setEsal(float esal) {
33this.esal = esal;
34}
35public String getEaddr() {
36return eaddr;
37}
38public void setEaddr(String eaddr) {
39this.eaddr = eaddr;
40}
41 
42 
43}
44

One-To-Many Association — Department.java

Example47
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4import java.util.Set;
5 
6public class Department {
7private String did;
8private String dname;
9private Set<Employee> emps;
10 
11public String getDid() {
12return did;
13}
14public void setDid(String did) {
15this.did = did;
16}
17public String getDname() {
18return dname;
19}
20public void setDname(String dname) {
21this.dname = dname;
22}
23public Set<Employee> getEmps() {
24return emps;
25}
26public void setEmps(Set<Employee> emps) {
27this.emps = emps;
28}
29 
30 
31}
32

One-To-Many Association — Employee.hbm.xml

Example48
JCode Cell
1 
2<?xml version="1.0" encoding="UTF-8"?>
3<!DOCTYPE hibernate-mapping PUBLIC
4"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
6<hibernate-mapping>
7<class name="com.durgasoft.pojo.Employee" table="emp1">
8 <id name="eid" column="EID" length="5"/>
9 <property name="ename" column="ENAME" length="10"/>
10 <property name="esal" column="ESAL" length="10"/>
11<property name="eaddr" column="EADDR" length="10"/>
12</class>
13</hibernate-mapping>
14

One-To-Many Association — Department.hbm.xml

Example49
JCode Cell
1 
2<?xml version="1.0" encoding="UTF-8"?>
3<!DOCTYPE hibernate-mapping PUBLIC
4"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
6<hibernate-mapping>
7<class name="com.durgasoft.pojo.Department" table="dept">
8 <id name="did" column="DID" length="5"/>
9 <property name="dname" column="DNAME" length="10"/>
10 <set name="emps" cascade="all">
11 <key column="DID"/>
12 <one-to-many class="com.durgasoft.pojo.Employee"/>
13</set>
14</class>
15</hibernate-mapping>
16

One-To-Many Association — hibernate.cfg.xml

Example50
JCode Cell
1 
2<?xml version="1.0" encoding="UTF-8"?>
3<!DOCTYPE hibernate-configuration PUBLIC
4"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
6<hibernate-configuration>
7<session-factory>
8 <property name="connection.driver_Class">oracle.jdbc.OracleDriver</property>
9 <property name="connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
10 <property name="connection.username">system</property>
11<property name="connection.password">durga</property>
12<property name="hibernate.hbm2ddl.auto">create</property>
13<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
14<property name="show_sql">true</property>
15<mapping resource="Employee.hbm.xml"/>
16<mapping resource="Department.hbm.xml"/>
17</session-factory>
18</hibernate-configuration>
19

One-To-Many Association — Test.java

Example51
JCode Cell
1 
2package com.durgasoft.test;
3 
4import java.util.HashSet;
5import java.util.Set;
6 
7import org.hibernate.Session;
8import org.hibernate.SessionFactory;
9import org.hibernate.Transaction;
10import org.hibernate.boot.registry.StandardServiceRegistry;
11import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
12import org.hibernate.cfg.Configuration;
13 
14import com.durgasoft.pojo.Department;
15import com.durgasoft.pojo.Employee;
16 
17public class Test {
18 
19public static void main(String[] args) throws Exception{
20Configuration config = new Configuration();
21config.configure();
22StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
23builder = builder.applySettings(config.getProperties());
24StandardServiceRegistry registry = builder.build();
25SessionFactory sessionFactory = config.buildSessionFactory(registry);
26Session session = sessionFactory.openSession();
27 
28Employee e1 = new Employee("E-111", "AAA", 5000, "Hyd");
29Employee e2 = new Employee("E-222", "BBB", 6000, "Hyd");
30Employee e3 = new Employee("E-333", "CCC", 7000, "Hyd");
31Employee e4 = new Employee("E-444", "DDD", 8000, "Hyd");
32 
33Set<Employee> emps = new HashSet<Employee>();
34emps.add(e1);
35emps.add(e2);
36emps.add(e3);
37emps.add(e4);
38 
39Department dept = new Department();
40dept.setDid("D-111");
41dept.setDname("ADMIN");
42dept.setEmps(emps);
43 
44Transaction tx = session.beginTransaction();
45session.save(dept);
46tx.commit();
47System.out.println("Department Inserted Successfully");
48session.close();
49sessionFactory.close();
50}
51}
52

One-To-Many Association — Employee.java

In Hibernate Applications, to represent One-To-Many association , JPA has provided the following annotation.

@OneToMany(cascade=CascadeType.ALL)

EX:

Example52
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4import javax.persistence.Column;
5import javax.persistence.Entity;
6import javax.persistence.Id;
7import javax.persistence.Table;
8 
9@Entity
10@Table(name="emp1")
11public class Employee {
12@Id
13@Column(name="EID", length=5)
14private String eid;
15@Column(name="ENAME", length=10)
16private String ename;
17@Column(name="ESAL", length=5)
18private float esal;
19@Column(name="EADDR", length=10)
20private String eaddr;
21 
22public Employee(String eid, String ename, float esal, String eaddr) {
23this.eid = eid;
24this.ename = ename;
25this.esal = esal;
26this.eaddr = eaddr;
27}
28 
29public Employee(){
30 
31}
32 
33public String getEid() {
34return eid;
35}
36public void setEid(String eid) {
37this.eid = eid;
38}
39public String getEname() {
40return ename;
41}
42public void setEname(String ename) {
43this.ename = ename;
44}
45public float getEsal() {
46return esal;
47}
48public void setEsal(float esal) {
49this.esal = esal;
50}
51public String getEaddr() {
52return eaddr;
53}
54public void setEaddr(String eaddr) {
55this.eaddr = eaddr;
56}
57 
58 
59}
60

One-To-Many Association — Department.java

Example53
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4import java.util.Set;
5 
6import javax.persistence.CascadeType;
7import javax.persistence.Column;
8import javax.persistence.Entity;
9import javax.persistence.Id;
10import javax.persistence.OneToMany;
11import javax.persistence.Table;
12@Entity
13@Table(name="dept")
14public class Department {
15@Id
16@Column(name="DID", length=5)
17private String did;
18@Column(name="DNAME", length=10)
19private String dname;
20@OneToMany(cascade=CascadeType.ALL)
21private Set<Employee> emps;
22 
23public String getDid() {
24return did;
25}
26public void setDid(String did) {
27this.did = did;
28}
29public String getDname() {
30return dname;
31}
32public void setDname(String dname) {
33this.dname = dname;
34}
35public Set<Employee> getEmps() {
36return emps;
37}
38public void setEmps(Set<Employee> emps) {
39this.emps = emps;
40}
41 
42}
43

One-To-Many Association — hibernate.cfg.xml

Example54
JCode Cell
1 
2<?xml version="1.0" encoding="UTF-8"?>
3<!DOCTYPE hibernate-configuration PUBLIC
4"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
6<hibernate-configuration>
7<session-factory>
8 <property name="connection.driver_Class">oracle.jdbc.OracleDriver</property>
9 <property name="connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
10 <property name="connection.username">system</property>
11<property name="connection.password">durga</property>
12<!-- <property name="hibernate.hbm2ddl.auto">create</property> -->
13<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
14<property name="show_sql">true</property>
15<mapping class="com.durgasoft.pojo.Employee"/>
16<mapping class="com.durgasoft.pojo.Department"/>
17</session-factory>
18</hibernate-configuration>
19

One-To-Many Association — Test.java

Example55
JCode Cell
1 
2package com.durgasoft.test;
3 
4import java.util.HashSet;
5import java.util.Set;
6 
7import org.hibernate.Session;
8import org.hibernate.SessionFactory;
9import org.hibernate.Transaction;
10import org.hibernate.boot.registry.StandardServiceRegistry;
11import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
12import org.hibernate.cfg.Configuration;
13 
14import com.durgasoft.pojo.Department;
15import com.durgasoft.pojo.Employee;
16 
17public class Test {
18 
19public static void main(String[] args) throws Exception{
20Configuration config = new Configuration();
21config.configure();
22StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
23builder = builder.applySettings(config.getProperties());
24StandardServiceRegistry registry = builder.build();
25SessionFactory sessionFactory = config.buildSessionFactory(registry);
26Session session = sessionFactory.openSession();
27/*
28Employee e1 = new Employee("E-111", "AAA", 5000, "Hyd");
29Employee e2 = new Employee("E-222", "BBB", 6000, "Hyd");
30Employee e3 = new Employee("E-333", "CCC", 7000, "Hyd");
31Employee e4 = new Employee("E-444", "DDD", 8000, "Hyd");
32 
33Set<Employee> emps = new HashSet<Employee>();
34emps.add(e1);
35emps.add(e2);
36emps.add(e3);
37emps.add(e4);
38 
39Department dept = new Department();
40dept.setDid("D-111");
41dept.setDname("ADMIN");
42dept.setEmps(emps);
43 
44Transaction tx = session.beginTransaction();
45session.save(dept);
46tx.commit();
47System.out.println("Department Inserted Successfully");
48*/
49Department dept = (Department)session.get(Department.class, "D-111");
50System.out.println("Department Details");
51System.out.println("-----------------------");
52System.out.println("Department Id :"+dept.getDid());
53System.out.println("Department Name :"+dept.getDname());
54Set<Employee> emps = dept.getEmps();
55System.out.println("EID\tENAME\tESAL\tEADDR");
56System.out.println("-----------------------------------");
57for(Employee emp: emps) {
58 System.out.print(emp.getEid()+"\t");
59 System.out.print(emp.getEname()+"\t");
60 System.out.print(emp.getEsal()+"\t");
61 System.out.print(emp.getEaddr()+"\n");
62}
63 
64session.close();
65sessionFactory.close();
66}
67}
68

Many-To-One Association

It is a relation between entity classes, where multiple instances of an entity should be mapped with exactly single instance of another entity.

EX: Multiple Students have joined with single branch — Branch.java

To provide Many-To-One Association in Hibernate applications then we have to use the following tag in mapping file.

<many-to-one name="--" class="--" cascade="all"/>

 where "name" attribute will take property name which is representing many to one relation.  where "class" attribute will take contained class name.  where "cascade" attribute will take the values like all, insert,.......

EX:

Example57
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4public class Branch {
5private String bid;
6private String bname;
7 
8public String getBid() {
9 return bid;
10}
11public void setBid(String bid) {
12this.bid = bid;
13}
14public String getBname() {
15return bname;
16}
17public void setBname(String bname) {
18this.bname = bname;
19}
20 
21}
22

EX: Multiple Students have joined with single branch — Student.java

Example58
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4public class Student {
5private String sid;
6private String sname;
7private String saddr;
8private Branch branch;
9 
10public String getSid() {
11return sid;
12}
13public void setSid(String sid) {
14this.sid = sid;
15}
16public String getSname() {
17return sname;
18}
19public void setSname(String sname) {
20this.sname = sname;
21}
22public String getSaddr() {
23return saddr;
24}
25public void setSaddr(String saddr) {
26this.saddr = saddr;
27}
28public Branch getBranch() {
29return branch;
30}
31public void setBranch(Branch branch) {
32this.branch = branch;
33}
34 
35 
36}
37

EX: Multiple Students have joined with single branch — Branch.hbm.xml

Example59
JCode Cell
1 
2<?xml version="1.0" encoding="UTF-8"?>
3<!DOCTYPE hibernate-mapping PUBLIC
4"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
6<hibernate-mapping>
7<class name="com.durgasoft.pojo.Branch" table="branch">
8 <id name="bid" column="BID" length="5"/>
9 <property name="bname" column="BNAME" length="10"/>
10</class>
11</hibernate-mapping>
12

EX: Multiple Students have joined with single branch — Student.hbm.xml

Example60
JCode Cell
1 
2<?xml version="1.0" encoding="UTF-8"?>
3<!DOCTYPE hibernate-mapping PUBLIC
4"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
6<hibernate-mapping>
7<class name="com.durgasoft.pojo.Student" table="student">
8 <id name="sid" column="SID" length="5"/>
9 <property name="sname" column="SNAME" length="10"/>
10 <property name="saddr" column="SADDR" length="10"/>
11<many-to-one name="branch" class="com.durgasoft.pojo.Branch" cascade="all"/>
12</class>
13</hibernate-mapping>
14

EX: Multiple Students have joined with single branch — Test.java

Example61
JCode Cell
1 
2package com.durgasoft.test;
3 
4import org.hibernate.Session;
5import org.hibernate.SessionFactory;
6import org.hibernate.Transaction;
7import org.hibernate.boot.registry.StandardServiceRegistry;
8import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
9import org.hibernate.cfg.Configuration;
10 
11import com.durgasoft.pojo.Branch;
12import com.durgasoft.pojo.Student;
13 
14public class Test {
15 
16public static void main(String[] args)throws Exception {
17Configuration config = new Configuration();
18config.configure();
19StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
20builder = builder.applySettings(config.getProperties());
21StandardServiceRegistry registry = builder.build();
22SessionFactory sessionFactory = config.buildSessionFactory(registry);
23Session session = sessionFactory.openSession();
24 
25Branch branch = new Branch();
26branch.setBid("B-111");
27branch.setBname("CS");
28 
29Student std1 = new Student();
30std1.setSid("S-111");
31std1.setSname("AAA");
32std1.setSaddr("Hyd");
33std1.setBranch(branch);
34 
35Student std2 = new Student();
36std2.setSid("S-222");
37std2.setSname("BBB");
38std2.setSaddr("Hyd");
39std2.setBranch(branch);
40 
41Student std3 = new Student();
42std3.setSid("S-333");
43std3.setSname("BBB");
44std3.setSaddr("Hyd");
45std3.setBranch(branch);
46 
47Transaction tx = session.beginTransaction();
48session.save(std1);
49session.save(std2);
50session.save(std3);
51tx.commit();
52System.out.println("Students are stored Successfully");
53session.close();
54sessionFactory.close();
55 
56 
57}
58 
59}
60

EX: Multiple Students have joined with single branch — Branch.java

To represent many-to-one association, JPA has provided a seperate annotation like @ManyToOne(calcade=CascadeType.ALL)

Example:

Example62
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4import javax.persistence.Column;
5import javax.persistence.Entity;
6import javax.persistence.Id;
7import javax.persistence.Table;
8 
9@Entity
10@Table(name="branch")
11public class Branch {
12@Id
13@Column(name="BID", length=5)
14private String bid;
15@Column(name="BNAME", length=10)
16private String bname;
17 
18public String getBid() {
19return bid;
20}
21public void setBid(String bid) {
22this.bid = bid;
23}
24public String getBname() {
25return bname;
26}
27public void setBname(String bname) {
28this.bname = bname;
29}
30 
31 
32}
33

EX: Multiple Students have joined with single branch — Student.java

Example63
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4import javax.persistence.CascadeType;
5import javax.persistence.Column;
6import javax.persistence.Entity;
7import javax.persistence.Id;
8import javax.persistence.ManyToOne;
9import javax.persistence.Table;
10 
11@Entity
12@Table(name="student")
13public class Student {
14@Id
15@Column(name="SID", length=5)
16private String sid;
17@Column(name="SNAME", length=10)
18private String sname;
19@Column(name="SADDR", length=10)
20private String saddr;
21@ManyToOne(cascade=CascadeType.ALL)
22private Branch branch;
23 
24public String getSid() {
25return sid;
26}
27public void setSid(String sid) {
28this.sid = sid;
29}
30public String getSname() {
31return sname;
32}
33public void setSname(String sname) {
34this.sname = sname;
35}
36public String getSaddr() {
37return saddr;
38}
39public void setSaddr(String saddr) {
40this.saddr = saddr;
41}
42public Branch getBranch() {
43return branch;
44}
45public void setBranch(Branch branch) {
46this.branch = branch;
47}
48 
49 
50}
51

EX: Multiple Students have joined with single branch — hibernate.cfg.xml

Example64
JCode Cell
1 
2<?xml version="1.0" encoding="UTF-8"?>
3<!DOCTYPE hibernate-configuration PUBLIC
4"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
6<hibernate-configuration>
7<session-factory>
8 <property name="connection.driver_Class">oracle.jdbc.OracleDriver</property>
9 <property name="connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
10 <property name="connection.username">system</property>
11<property name="connection.password">durga</property>
12<!-- <property name="hibernate.hbm2ddl.auto">create</property>-->
13<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
14<property name="show_sql">true</property>
15<mapping class="com.durgasoft.pojo.Branch"/>
16<mapping class="com.durgasoft.pojo.Student"/>
17</session-factory>
18</hibernate-configuration>
19

EX: Multiple Students have joined with single branch — Test.java

Example65
JCode Cell
1 
2package com.durgasoft.test;
3 
4import org.hibernate.Session;
5import org.hibernate.SessionFactory;
6import org.hibernate.Transaction;
7import org.hibernate.boot.registry.StandardServiceRegistry;
8import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
9import org.hibernate.cfg.Configuration;
10 
11import com.durgasoft.pojo.Branch;
12import com.durgasoft.pojo.Student;
13 
14public class Test {
15 
16public static void main(String[] args)throws Exception {
17Configuration config = new Configuration();
18config.configure();
19StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
20builder = builder.applySettings(config.getProperties());
21StandardServiceRegistry registry = builder.build();
22SessionFactory sessionFactory = config.buildSessionFactory(registry);
23Session session = sessionFactory.openSession();
24 
25/*
26Branch branch = new Branch();
27branch.setBid("B-111");
28branch.setBname("CS");
29 
30Student std1 = new Student();
31std1.setSid("S-111");
32std1.setSname("AAA");
33std1.setSaddr("Hyd");
34std1.setBranch(branch);
35 
36Student std2 = new Student();
37std2.setSid("S-222");
38std2.setSname("BBB");
39std2.setSaddr("Hyd");
40std2.setBranch(branch);
41 
42Student std3 = new Student();
43std3.setSid("S-333");
44std3.setSname("BBB");
45std3.setSaddr("Hyd");
46std3.setBranch(branch);
47 
48Transaction tx = session.beginTransaction();
49session.save(std1);
50session.save(std2);
51session.save(std3);
52tx.commit();
53System.out.println("Students are stored Successfully");
54*/
55Student std1 = (Student)session.get(Student.class, "S-111");
56Branch branch = std1.getBranch();
57System.out.println("Student Details");
58System.out.println("---------------------");
59System.out.println("Student Id :"+std1.getSid());
60System.out.println("Student Name :"+std1.getSname());
61System.out.println("Student Address :"+std1.getSaddr());
62System.out.println("Branch Id :"+branch.getBid());
63System.out.println("Branch Name :"+branch.getBname());
64System.out.println();
65 
66Student std2 = (Student)session.get(Student.class, "S-222");
67branch = std2.getBranch();
68System.out.println("Student Details");
69System.out.println("---------------------");
70System.out.println("Student Id :"+std2.getSid());
71System.out.println("Student Name :"+std2.getSname());
72System.out.println("Student Address :"+std2.getSaddr());
73System.out.println("Branch Id :"+branch.getBid());
74System.out.println("Branch Name :"+branch.getBname());
75System.out.println();
76 
77Student std3 = (Student)session.get(Student.class, "S-333");
78branch = std3.getBranch();
79System.out.println("Student Details");
80System.out.println("---------------------");
81System.out.println("Student Id :"+std3.getSid());
82System.out.println("Student Name :"+std3.getSname());
83System.out.println("Student Address :"+std3.getSaddr());
84System.out.println("Branch Id :"+branch.getBid());
85System.out.println("Branch Name :"+branch.getBname());
86 
87session.close();
88sessionFactory.close();
89 
90 
91}
92 
93}
94

Many-To-Many Associations — Course.java

It is a relation between entities , where multiple instances of an entity must be mapped with multiple instances of another entity. EX: Multiple Students have joined with Multiple Courses.

To repesent Many-To-Many mapping we have to use the following tags in mapping file. <set name="--" table="--" cascade="--"> <key column="---"/> <many-tomany column="--" class=""/>

</set>

 Where "<set>" tag is representing many side, where "name" attribute in <set> tag will take property name which is providing many side , where "table" attribute will take join_table name, where "cascade" will take "all", "insert", "update",.....

 Where "<key>" tag is able to take primary key of the container represented table, where "column" attribute will take that value.

 Where "<many-to-many>" tag will represent many-to-many association, where "column" attribute will take target table primary kery column name, where "class" attribute will take target class name.

Example:

Example66
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4public class Course {
5private String cid;
6private String cname;
7private int ccost;
8 
9public String getCid() {
10 return cid;
11}
12public void setCid(String cid) {
13this.cid = cid;
14}
15public String getCname() {
16return cname;
17}
18public void setCname(String cname) {
19this.cname = cname;
20}
21public int getCcost() {
22return ccost;
23}
24public void setCcost(int ccost) {
25this.ccost = ccost;
26}
27 
28 
29 
30}
31

Many-To-Many Associations — Student.java

Example67
JCode Cell
1 
2package com.durgasoft.pojo;
3 
4import java.util.Set;
5 
6public class Student {
7private String sid;
8private String sname;
9private String saddr;
10private Set<Course> courses;
11 
12public String getSid() {
13return sid;
14}
15public void setSid(String sid) {
16this.sid = sid;
17}
18public String getSname() {
19return sname;
20}
21public void setSname(String sname) {
22this.sname = sname;
23}
24public String getSaddr() {
25return saddr;
26}
27public void setSaddr(String saddr) {
28this.saddr = saddr;
29}
30public Set<Course> getCourses() {
31return courses;
32}
33public void setCourses(Set<Course> courses) {
34this.courses = courses;
35}
36}
37

Many-To-Many Associations — Course.hbm.xml

Example68
JCode Cell
1 
2<?xml version="1.0" encoding="UTF-8"?>
3<!DOCTYPE hibernate-mapping PUBLIC
4"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
6<hibernate-mapping>
7<class name="com.durgasoft.pojo.Course" table="course">
8 <id name="cid" column="CID" length="5"/>
9 <property name="cname" column="CNAME" length="10"/>
10 <property name="ccost" column="Ccost" length="5"/>
11 
12</class>
13</hibernate-mapping>
14

Many-To-Many Associations — Student.hbm.xml

Example69
JCode Cell
1 
2<?xml version="1.0" encoding="UTF-8"?>
3<!DOCTYPE hibernate-mapping PUBLIC
4"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
6<hibernate-mapping>
7<class name="com.durgasoft.pojo.Student" table="student">
8 <id name="sid" column="SID" length="5"/>
9 <property name="sname" column="SNAME" length="10"/>
10 <property name="saddr" column="SADDR" length="10"/>
11 
12<set name="courses" table="student_course" cascade="all">
13 <key column="sid"/>
14 <many-to-many column="cid" class="com.durgasoft.pojo.Course" />
15</set>
16</class>
17</hibernate-mapping>
18

Many-To-Many Associations — hibernate.hbm.xml

Example70
JCode Cell
1 
2<?xml version="1.0" encoding="UTF-8"?>
3<!DOCTYPE hibernate-configuration PUBLIC
4"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
5"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
6<hibernate-configuration>
7<session-factory>
8 <property name="connection.driver_Class">oracle.jdbc.OracleDriver</property>
9 <property name="connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
10 <property name="connection.username">system</property>
11<property name="connection.password">durga</property>
12<property name="hibernate.hbm2ddl.auto">create</property>
13<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
14<property name="show_sql">true</property>
15<mapping resource="Course.hbm.xml"/>
16<mapping resource="Student.hbm.xml"/>
17</session-factory>
18</hibernate-configuration>
19

Many-To-Many Associations — Test.java

Example71
JCode Cell
1 
2package com.durgasoft.test;
3 
4import java.util.HashSet;
5import java.util.Set;
6 
7import org.hibernate.Session;
8import org.hibernate.SessionFactory;
9import org.hibernate.Transaction;
10import org.hibernate.boot.registry.StandardServiceRegistry;
11import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
12import org.hibernate.cfg.Configuration;
13 
14import com.durgasoft.pojo.Course;
15import com.durgasoft.pojo.Student;
16 
17 
18public class Test {
19 
20public static void main(String[] args)throws Exception {
21Configuration config = new Configuration();
22config.configure();
23StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
24builder = builder.applySettings(config.getProperties());
25StandardServiceRegistry registry = builder.build();
26SessionFactory sessionFactory = config.buildSessionFactory(registry);
27Session session = sessionFactory.openSession();
28 
29Course c1 = new Course();
30c1.setCid("C-111");
31c1.setCname("C");
32c1.setCcost(500);
33Course c2 = new Course();
34c2.setCid("C-222");
35c2.setCname("C++");
36c2.setCcost(1000);
37Course c3 = new Course();
38c3.setCid("C-333");
39c3.setCname("Java");
40c3.setCcost(2000);
41Set<Course> courses = new HashSet<Course>();
42courses.add(c1);
43courses.add(c2);
44courses.add(c3);
45 
46Student std1 = new Student();
47std1.setSid("S-111");
48std1.setSname("AAA");
49std1.setSaddr("Hyd");
50std1.setCourses(courses);
51Student std2 = new Student();
52std2.setSid("S-222");
53std2.setSname("BBB");
54std2.setSaddr("Hyd");
55std2.setCourses(courses);
56Student std3 = new Student();
57std3.setSid("S-333");
58std3.setSname("CCC");
59std3.setSaddr("Hyd");
60std3.setCourses(courses);
61 
62Transaction tx = session.beginTransaction();
63session.save(std1);
64session.save(std2);
65session.save(std3);
66tx.commit();
67System.out.println("Students Inserted Successfully");
68 
69session.close();
70sessionFactory.close();
71}
72}
73

Retrieving the data through annotation — Hibernate.cfg.xml

To represent many _to_many association mapping,EJB3 has provide the following annotations.

@ManyTomany(cascade=”_”) @jointable(name=”_”,joincolumns=”_”,inversejoincolumns=”_”) @joincolumn(name=”_”)

 Where, @Manyto many annotation will represent many_to_many association mapping.  Where,@jointable annotation will represent the meta data about the join table.

 Name->join table nam e,joincolumns->array of @joincolumn annotation;  Inversejoincolumn->array on @joincolumn annonation to represent inverse

join key configuration.

 Where, @joincolumn annotation can be used to represent a column available in join table.  Where @join column annotation must be user as nested annotation to @jointable

annotation.

Example72
JCode Cell
1 
2<hibernate-configuration>
3----
4<mapping class =”student”/>
5<mapping class=”course”/>
6<session-factory>
7</hibernate-configuration>
8

Retrieving the data through annotation — Student.java

Example73
JCode Cell
1 
2Import java.util.*;
3Import javx.persistence.*;
4@entity
5@table(name=”student”)
6Public class student
7{
8@id
9@column (name=”sid”);
10Private string sid;
11@column(name=”sname”)
12Private string sname;
13Private string sname;
14@Many to Many(cascade=cascadetype.All)
15 
16 
17 
18@JoinTable(name=”student_course”,joinColumns={@JoinColumn(name=”sid”)},inverseJoinColumns={@JoinColumn(name=”cid”)})
19Private Collection<Course> courses;
20setXxx(-);
21getXxx( );
22}
23

Retrieving the data through annotation — Course.java

Example74
JCode Cell
1 
2Import javax.persistence.*;
3@Entity
4@Table(name=”course”)
5Public class Course
6{
7@Id
8@Column(name=”cid”)
9Private String cid;
10@Column(name=”cname”)
11Private String cname;
12setXxx(-);
13getXxx(-);
14

Retrieving the data through annotation — ClientApp.java

Example75
JCode Cell
1 
2Import java.util.*;
3Import org.hibernate.*;
4Import org.hibernate.cfg.*;
5Public class ClientApp
6{
7Public static void main(String
8{
9Configuration cfg=new AnnotationConfiguration( );
10cfg.configure();
11SessionFactory sf=cfg.buildSessionFactory();
12Session s=sf.openSession( );
13Student s1=(Student)s.get(“Student”,”s1”);
14Sop1(“StudentDetails”);
15Sopl(“……..”);
16Sopl (“student id””+s1.getSid());
17Sopl (“Student name”.”+s1.getSname());
18Collection c=s1.getCourses();
19Iterator it=c.iterartor( );
20Sopl (“course details”);
21Sopl (“……..”);
22Sopl (“CID NAME”);
23Sopl (“……..”);
24While
25{
26Course crs=(Course)it.next( );
27Sopl (crs.getCid()+” “+crs.getCname());
28}
29Sopl (“………”);
30Student s2=(Student)s.get(“Student”,”s2”);
31Sopl (“Student Details”);
32Sopl (“………”);
33Sopl(student id..”+s2.getSid());
34C=s2.getCourses();
35It=c.iterate();
36Sopl(“Course Details”);
37Sopl(“………”);
38Sopl(“CID CNAME”);
39While(it.hasNext())
40{
41Course crs =(Course)it.next( );
42Sopl(crs.getCid()+” “+crs.getCname());
43s.close();
44}
45}
46
📝 Key Takeaways
  • Key ideas of Hibernate - Inheritance Mapping (Table Per Subclass) explained simply
  • Ready-to-use code examples
  • Exam-style questions at the end