In this tutorial, I am going to show you how to work with Hibernate Left Join.
What is Left Join?
The Left Join is a keyword in SQL, which returns all data from the left-hand side table and matching records from the right-hand side table. We can see the NULL values from the right side if there is no match.
Hibernate Left Join :
We can apply the Joins in Hibernate by using the HQL query or native SQL query. To make a join between the two tables, the two tables must be in a logical relationship. We can achieve the relationship between two tables by applying the parent table’s primary key as a child table’s foreign key.
Hibernate Left Join Example :
For this tutorial, I am going to take the two tables like Customer and Items; these two are having one to many relationship. That means one Customer can have multiple Items.
Project Structure :
Create customer and item tables with data to apply left join.
Customer Table: Create item Table: Customer.java
package com.otp.hibernate.pojo;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name = "customer")
public class Customer {
@Id
@Column(name = "cid")
private int customerId;
@Column(name = "cname", length = 15)
private String customerName;
@Column(name = "ccity", length = 20)
private String customerCity;
@OneToMany(targetEntity = Item.class, cascade = CascadeType.ALL)
@JoinColumn(name = "cid",referencedColumnName="cid")
private List items;
public int getCustomerId() {
return customerId;
}
public void setCustomerId(int customerId) {
this.customerId = customerId;
}
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public String getCustomerCity() {
return customerCity;
}
public void setCustomerCity(String customerCity) {
this.customerCity = customerCity;
}
public List getItems() {
return items;
}
public void setItems(List items) {
this.items = items;
}
}
Create Item Class
package com.otp.hibernate.pojo;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="item")
public class Item {
@Id
@Column(name="iid")
private int itemId;
@Column(name="iname")
private String itemName;
@Column(name="price")
private int price;
public int getItemId() {
return itemId;
}
public void setItemId(int itemId) {
this.itemId = itemId;
}
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
Create Hibernate Configuration File :
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.samples</groupId>
<artifactId>Hibernate-LeftJoin-Example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.0.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
</dependencies>
</project>
Create Hibernate Utility Class
package com.otp.hibernate.pojo;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtility{
private static SessionFactory factory;
private HibernateUtility() {
}
public synchronized static SessionFactory getSessionFactory() {
if (factory == null) {
factory = new Configuration().configure("hibernate.cfg.xml")
.buildSessionFactory();
}
return factory;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return new RuntimeException("Clone not Supported");
}
}
Run the application :
Query For Hibernate Left Join on the above tables, the same will be implemented in below class as hql select query.
select c.customerName, c.customerCity, i.itemName,i.price from Customer c left join c.items i;
Main.java
import java.util.Iterator;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import com.otp.hibernate.pojo.HibernateUtility;
public class Main {
public static void main(String[] args) {
SessionFactory factory = HibernateUtility.getSessionFactory();
Session session = factory.openSession();
Query qry= session.createQuery("select c.customerName, c.customerCity, i.itemName,i.price from Customer c "
+ "left join c.items i");
List l = qry.list();
Iterator it=l.iterator();
while(it.hasNext())
{
Object rows[] = (Object[])it.next();
System.out.println(rows[0]+ " -- " +rows[1] + "--"+rows[2]+"--"+rows[3]);
}
session.clear();
session.close();
}
}
Output:
Happy Learning 🙂