Example On Hibernate Criteria With Multiple Projections

If we want to load partial object, with multiple columns using criteria then we need to create the ProjectionList with the multiple properties and then we need to add that ProjectionList to the criteria

files required…

  • Product.java(POJO class)
  • Product.hbm.xml
  • hibernate.cfg.xml
  • ForOurLogic.java (For writing our business logic)
  • Product.java

    1234567891011121314151617181920212223242526272829303132333435package str;
    
    public class Product{
    
    	private int productId;
    	private String proName;
    	private double price;
    
    	public void setProductId(int productId)
    	{
    	    this.productId = productId;
    	}
    	public int getProductId()
    	{
    	    return productId;
    	}
    
    	public void setProName(String proName)
    	{
    	    this.proName = proName;
    	}
    	public String getProName()
    	{
    	    return proName;
    	}
    
    	public void setPrice(double price)
    	{
    	    this.price = price;
    	}
    	public double getPrice()
    	{
    	    return price;
    	}
    }

    Product.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.Product" table="products">
    
    <id name="productId" column="pid"  />
    <property name="proName" column="pname" length="10"/>
    <property name="price"/>
    
    </class>
    </hibernate-mapping>

    hibernate.cfg.xml

    1234567891011121314151617181920<?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="Product.hbm.xml"></mapping>
    </session-factory>
    </hibernate-configuration>

    ForOurLogic.java

    1234567891011121314151617181920212223242526272829303132333435363738394041424344454647package str;
    
    import java.util.Iterator;
    import java.util.List;
    
    import org.hibernate.Criteria;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.criterion.ProjectionList;
    import org.hibernate.criterion.Projections;
    
    public class ForOurLogic_2 { 
    
    	@SuppressWarnings("unchecked")
    	public static void main(String[] args)
    	{
    
    		Configuration cfg = new Configuration();
    		cfg.configure("hibernate.cfg.xml"); 
    
    		SessionFactory factory = cfg.buildSessionFactory();
    		Session session = factory.openSession();		
    
    		Criteria crit = session.createCriteria(Product.class);	
    
    

    ProjectionList p1=Projections.projectionList();

    p1.add(Projections.property("proName"));

    p1.add(Projections.property("price"));

    crit.setProjection(p1);

    List l=crit.list(); Iterator it=l.iterator(); while(it.hasNext()) {

    Object ob[] = (Object[])it.next();

    System.out.println(ob[0]+"--------"+ob[1]); } session.close(); factory.close(); } }

    Notes:

  • See line numbers 27,28,29, for using multiple projections we must create this ProjectionList object then we have to add all of our projections to ProjectionList, then finally add this ProjectionList object to criteria (see line number 31)
  • Now see line number 39, Finally we have to typecast into object array
  • Remember, we have to typecast into our pojo class type if we load complete object from the database,  we have to typecast into that property type if we load partial object (single column), we have to typecast into object array if we load partial object (more than single column)
  • hibernate projections, hibernate multiple projections, example on hibernate projections, projections in hibernate,

Related Articles

post a comment