You are on page 1of 8

SQL Join:

SELECT <P>.<COLUMNS>,<C>.<COLUMNS>

FROM [PARENT-TABLE] <P>


[JOIN TYPE]
[CHILD-TABLE] <C>

ON <P>.<pk>=<C>.<FK>
---------------------------------------
SQL> conn nithib
Enter password:
Connected.
SQL> select * from tab;

TNAME TABTYPE CLUSTERID


------------------------------ ------- ----------
MODELTAB TABLE
PRODTAB TABLE

SQL> desc modeltab


Name Null? Type
----------------------------------------- -------- -------------------

MID NOT NULL NUMBER(10)


MCOLOR VARCHAR2(255)
PIDFK NUMBER(10)

SQL> desc prodtab


Name Null? Type
----------------------------------------- -------- -------------------

PID NOT NULL NUMBER(10)


PCODE VARCHAR2(255)
PCOST FLOAT(126)
-------------------------------------------------------------------------
***
SELECT p.pcode,m.mcolor

FROM prodtab p
inner join
modeltab m

ON p.pid=m.pidFk

SQL#Join-1
SELECT p.pcode,m.mcolor FROM prodtab p inner join modeltab m ON p.pid=m.pidFk;
(or)
SELECT p.pcode,m.mcolor FROM prodtab p join modeltab m ON p.pid=m.pidFk;

SQL#Join-2
SELECT p.pcode,m.mcolor FROM prodtab p left outer join modeltab m ON
p.pid=m.pidFk;
(or)
SELECT p.pcode,m.mcolor FROM prodtab p left join modeltab m ON p.pid=m.pidFk;
==============================================================================
*** HQL Join **
Syntax:
SELECT P.VARIABLE,C.VARIABLE
FROM <PARENT_MODEL_CLASS> P
[JOIN TYPE]
<P.HAS_A_VARIABLE> AS C
WHERE <CONDITION>;

Example:
SELECT pob.prodCode,mob.modColor

FROM in.nit.model.Product pob


INNER JOIN
pob.mobs AS mob

-----------------------------------------------------------------------
***Note:
a. If DB is not supports Joins(or any one Join) then it will not even work
in Hibernate Application also.

b. Few DBs are going to support FULL JOIN insted of FULL OUTER JOIN.
Here, OUTER may be not used for FULL JOIN.

c. JOIN OR INNER JOIN


LEFT JOIN OR LEFT OUTER JOIN
RIGHT JOIN OR RIGHT OUTER JOIN
FULL JOIN OR FULL OUTER JOIN are same.

d. HQL Dialect must be changed to specific Dialect while working with


Joins, Functions/procedures..etc

ex: Oracle10gDialect , Oracle9iDialect, Oracle12cDialect.

=======================Code=====================================
1. pom.xml
<properties>
<maven.compiler.source>13</maven.compiler.source>
<maven.compiler.target>13</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.10.Final</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>com.jslsolucoes</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
</dependency>

</dependencies>

2. Child Model class


package in.nit.model;

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

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name="modeltab")
public class Model {
@Id
@Column(name="mid")
private Integer modId;
@Column(name="mcolor")
private String modColor;

3. Parent Model class


package in.nit.model;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name="prodtab")
public class Product {
@Id
@Column(name="pid")
private Integer prodId;
@Column(name="pcode")
private String prodCode;
@Column(name="pcost")
private Double prodCost;

@OneToMany
@JoinColumn(name="pidFk")
private List<Model> mobs;
}

4. hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<hibernate-configuration>
<session-factory>
<property
name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property
name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1522:ORCL</property>
<property name="hibernate.connection.username">nithib</property>
<property name="hibernate.connection.password">nithib</property>
<property
name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">false</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping class="in.nit.model.Model"/>
<mapping class="in.nit.model.Product"/>
</session-factory>
</hibernate-configuration>

5. Test (save data)


package in.nit.test;

import java.util.Arrays;

import org.hibernate.Session;
import org.hibernate.Transaction;

import in.nit.model.Model;
import in.nit.model.Product;
import in.nit.util.HibernateUtil;

public class Test {

public static void main(String[] args) {


Session ses=HibernateUtil.getSf().openSession();
Transaction tx=null;
try(ses) {
tx=ses.beginTransaction();
Model m1=new Model(55,"RED");
Model m2=new Model(56,"BLUE");
Model m3=new Model(57,"PINK");
Model m4=new Model(58,"CYAN");
Model m5=new Model(59,"GREY");

Product p1=new Product(10, "A", 2.3, null);


Product p2=new Product(11, "B", 4.6, Arrays.asList(m2));
Product p3=new Product(12, "C", 9.1, null);
Product p4=new Product(13, "D", 8.2, Arrays.asList(m4));
Product p5=new Product(14, "E", 6.4, null);

ses.save(m1);
ses.save(m2);
ses.save(m3);
ses.save(m4);
ses.save(m5);

ses.save(p1);
ses.save(p2);
ses.save(p3);
ses.save(p4);
ses.save(p5);

tx.commit();
} catch (Exception e) {
tx.rollback();
e.printStackTrace();
}
}
}

6. Test (JOINS)#a
package in.nit.test;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.query.Query;

import in.nit.util.HibernateUtil;

public class TestFetchInnerJoin {

public static void main(String[] args) {


Session ses=HibernateUtil.getSf().openSession();
try (ses){
String hql=" SELECT pob.prodCode,mob.modColor " +
" FROM in.nit.model.Product pob " +
" INNER JOIN " +
" pob.mobs AS mob ";

Query q=ses.createQuery(hql);

List<Object[]> list=q.list();

for(Object[] ob:list) {
System.out.println(ob[0]+"-"+ob[1]);
}

} catch (Exception e) {
e.printStackTrace();
}
}
}

7. Test#Join-b
package in.nit.test;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.query.Query;
import in.nit.util.HibernateUtil;

public class TestFetchInnerJoin {

public static void main(String[] args) {


Session ses=HibernateUtil.getSf().openSession();
try (ses){
String hql=" SELECT pob.prodCode,mob.modColor " +
" FROM in.nit.model.Product pob " +
" LEFT JOIN " +
" pob.mobs AS mob ";

Query q=ses.createQuery(hql);

List<Object[]> list=q.list();

for(Object[] ob:list) {
System.out.println(ob[0]+"-"+ob[1]);
}

} catch (Exception e) {
e.printStackTrace();
}
}
}

8-Test#Join-c
package in.nit.test;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.query.Query;

import in.nit.util.HibernateUtil;

public class TestFetchInnerJoin {

public static void main(String[] args) {


Session ses=HibernateUtil.getSf().openSession();
try (ses){
String hql=" SELECT pob.prodCode,mob.modColor " +
" FROM in.nit.model.Product pob " +
" RIGHT OUTER JOIN " +
" pob.mobs AS mob ";

Query q=ses.createQuery(hql);

List<Object[]> list=q.list();

for(Object[] ob:list) {
System.out.println(ob[0]+"-"+ob[1]);
}

} catch (Exception e) {
e.printStackTrace();
}
}
}
9. Test#Join-D
package in.nit.test;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.query.Query;

import in.nit.util.HibernateUtil;

public class TestFetchInnerJoin {

public static void main(String[] args) {


Session ses=HibernateUtil.getSf().openSession();
try (ses){
String hql=" SELECT pob.prodCode,mob.modColor " +
" FROM in.nit.model.Product pob " +
" FULL JOIN " +
" pob.mobs AS mob ";

Query q=ses.createQuery(hql);

List<Object[]> list=q.list();

for(Object[] ob:list) {
System.out.println(ob[0]+"-"+ob[1]);
}

} catch (Exception e) {
e.printStackTrace();
}
}
}
===========================================================================
HAS-A
Ex#2 Employee ------<> Project
*...1

Employee (empId,empName,empSal,proj:Project)
Project (projId,projCode,projCost)

--HQL Joins-- Syntax---


SELECT <p>.<variable>,<c>.variable

FROM <parent_model_class> <p>


[join_type] <p>.<hasAVariable> as <c>;

Ex:
SELECT emp.empId,prj.projCode,prj.projCost

FROM in.nit.model.Employee emp


INNER JOIN
emp.proj as prj
===================================================================
HAS-A
Ex: Student ------<> Course
*...*
Student(stdId,stdName,stdFee,cobs:List<Course>)
Course(crsId,crsName,facName,duration)

Join Ex:
SELECT sob.stdName,crs.crsName

FROM in.nit.model.Student sob


LEFT JOIN
sob.cobs as crs
===================================================================
HAS-A
Ex: Book -------<> Author

Book(bid,bname,bamt,discount,auth:Author)
Author(aid,aname,addr)

Join Ex:
SELECT ob.bname,ob.bamt,auth.aname

FROM in.nit.model.Book ob
RIGHT JOIN
ob.auth as auth
=====================================================================

You might also like