Hibernate Many to One Mapping Select Query Example

In many to one relationship, when ever child object is loaded from the database then automatically the parent object will also be loaded from the database. Let us an example on selecting single child object with its parent object.

But remember, in many to one we can see 2 types of object loadings (selecting)

  • proxy
  • early loading

In many to one relationship, the lazy attribute (in mapping xml) values are either proxy or false.  If we write lazy=”false” then when ever child object is loading then immediately parent object will also be loading from the database.

The default value of lazy is proxy, means here when ever child object is loaded then parent object is not loaded immediately, but a proxy object will be loaded with it (logical object)

When ever the parent object is accessed then at that moment that parent object will be loaded from the database.

Note: In our program am not using lazy attribute in xml files so just go ahead and insert this lazy attribute and test the output on the eclipse console

Example on Many to One With select Query

files required…

  • Vendor [parent pojo]
  • Customer.java [child pojo]
  • OurLogic.java [our logic]
  • Vendor.hbm.xml
  • Customer.hbm.xml
  • hibernate.cfg.xml

Vendor.java

123456789101112131415161718192021package str;

public class Vendor {

	private int vendorId;
	private String vendorName;

	public int getVendorId() {
		return vendorId;
	}
	public void setVendorId(int vendorId) {
		this.vendorId = vendorId;
	}
	public String getVendorName() {
		return vendorName;
	}
	public void setVendorName(String vendorName) {
		this.vendorName = vendorName;
	}	

}

Customer.java

1234567891011121314151617181920212223242526package str;
public class Customer {

	private int customerId;
	private String customerName;
	private Vendor parentObjects;

	public Vendor getParentObjects() {
		return parentObjects;
	}
	public void setParentObjects(Vendor parentObjects) {
		this.parentObjects = parentObjects;
	}
	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;
	}
}

Vendor.hbm.xml

12345678910111213<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class name="str.Vendor" table="vendor">

<id name="vendorId" column="vendid"  />
<property name="vendorName" column="vendname" length="10"/>

</class>
</hibernate-mapping>

Customer.hbm.xml

1234567891011121314<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class name="str.Customer" table="customer">

<id name="customerId" column="custid"  />
<property name="customerName" column="custname" length="10"/>

<many-to-one name="parentObjects" column="Vdummy" cascade="all" />

</class> </hibernate-mapping>

hibernate.cfg.xml

123456789101112131415161718192021<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver
</property>
<property name="connection.url">jdbc:oracle:thin:@www.java4s.com:1521:XE</property>
<property name="connection.username">system</property>
<property name="connection.password">admin</property>

<property name="dialect">org.hibernate.dialect.OracleDialect</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">update</property>

<mapping resource="Customer.hbm.xml"></mapping>
<mapping resource="Vendor.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>

Many To One Select One Child Object With Parent

OurLogic.java

123456789101112131415161718192021222324252627282930package str;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class OurLogic {

	public static void main(String args[])
	{

		Configuration cfg = new Configuration();
		cfg.configure("hibernate.cfg.xml"); 

		SessionFactory factory = cfg.buildSessionFactory();
		Session session = factory.openSession();		

Object o = session.get(Customer.class, new Integer(506));

Customer c = (Customer)o; System.out.println(c.getCustomerName()); Vendor v=c.getParentObjects(); System.out.println(v.getVendorName()); session.close(); System.out.println("many to one select is done..!!"); factory.close(); } }

Many To One Select All Child Objects With Parents

OurLogic.java

12345678910111213141516171819202122232425262728293031323334353637383940package str;

import java.util.Iterator;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class OurLogic {

	public static void main(String args[])
	{

		Configuration cfg = new Configuration();
		cfg.configure("hibernate.cfg.xml"); 

		SessionFactory factory = cfg.buildSessionFactory();
		Session session = factory.openSession();		

Query qry=session.createQuery("from Customer c");

List l=qry.list(); Iterator it = l.iterator();

while(it.hasNext())

{

Object o = it.next();

Customer c = (Customer)o;

System.out.println(c.getCustomerName());

Vendor v=c.getParentObjects();

System.out.println(v.getVendorName());

}

session.close(); System.out.println("many to one select done..!!"); factory.close(); } }

Related Articles

post a comment