Hibernate Named Query Example
Let us see an example on Hibernate Named Queries
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
12345678910111213141516171819<?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>
<query name="Myquery">
<![CDATA[from Product p where p.price>:java4s ]]>
</query>
</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
1234567891011121314151617181920212223242526272829303132333435363738394041package 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 ForOurLogic { @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();
Query qry=session.getNamedQuery("Myquery");
qry.setParameter("java4s", new Double(15000));
List l=qry.list(); System.out.println("List total size..._"+l.size()); Iterator it=l.iterator(); while(it.hasNext()) { Product p=(Product)it.next(); System.out.println(p.getProductId()+" "+p.getProName()+" "+p.getPrice()); System.out.println("-----------------"); } session.close(); factory.close(); } }Notes:
- See Product.hbm.xml file, line numbers 15, 16, 17, we have given one HQL query in the <query /> element
- In ForOurLogic.java file, line number 23 will get that query from mapping xml into Query object, in line 24 we just passed the value to that label normally
-
But if you would like to use Named Query with Native SQL, then we need to change our mapping file like…
Product.hbm.xml
12345678910111213141516171819<?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>
<sql-query name="Myquery">
select * from PRODUCTS
</sql-query>
</hibernate-mapping>Note: In this case we need to use one new element <sql-query /> unlike <query /> element which we used to write HQL query
post a comment