Criteria in Hibernate Example

<div dir&equals;"ltr" style&equals;"text-align&colon; justify&semi;">&NewLine;<div dir&equals;"ltr" style&equals;"text-align&colon; justify&semi;">&NewLine;<div dir&equals;"ltr" style&equals;"text-align&colon; justify&semi;">&NewLine;<div dir&equals;"ltr" style&equals;"text-align&colon; justify&semi;">&NewLine;<div dir&equals;"ltr" style&equals;"text-align&colon; justify&semi;">&NewLine;<div dir&equals;"ltr" style&equals;"text-align&colon; justify&semi;">&NewLine;<div style&equals;"color&colon; &num;20124d&semi;">&NewLine;<p>In this tutorial of Criteria in Hibernate Example we will discuss about the Criteria API of hibernate it is using for fetching data from the database in the Hibernate&period;<&sol;p>&NewLine;<p>There are three way to pulling data from the database in the Hibernate&period;<&sol;p>&NewLine;<&sol;div>&NewLine;<ol style&equals;"text-align&colon; left&semi;">&NewLine;<li style&equals;"color&colon; &num;20124d&semi;"><b>Using session methods<&sol;b>&lpar;get&lpar;&rpar; and load&lpar;&rpar; methods&rpar;  -limited control to accessing data<&sol;li>&NewLine;<li style&equals;"color&colon; &num;20124d&semi;"><b>Using HQL<&sol;b> &&num;8211&semi; Slightly more control using where clause and other clauses but there are some problems here&&num;8230&semi; is more complicated to maintain in case of bigger queries with lots of clauses&period;<&sol;li>&NewLine;<li><b style&equals;"color&colon; &num;20124d&semi;">Using Criteria API<&sol;b><&sol;li>&NewLine;<&sol;ol>&NewLine;<&sol;div>&NewLine;<h2 style&equals;"color&colon; blue&semi;"><i><b>WHAT IS CRITERIA API&quest;<&sol;b><&sol;i><&sol;h2>&NewLine;<div style&equals;"color&colon; &num;20124d&semi;">&NewLine;<p>The API &lpar;Application Programming Interface&rpar; of Hibernate Criteria provides an elegant way of building dynamic query on the persistence database&period;<&sol;p>&NewLine;<&sol;div>&NewLine;<div style&equals;"color&colon; &num;20124d&semi;">&NewLine;<p>The hibernate criteria API is very Simplified API for fetching data from Criterion objects&period; The criteria API is an alternative of HQL &lpar;Hibernate Query Language&rpar; queries&period; It is more powerful and flexible for writing tricky criteria functions and dynamic queries<&sol;p>&NewLine;<h2><b>1&period; Using Criteria API to create criteria&colon;<&sol;b><&sol;h2>&NewLine;<&sol;div>&NewLine;<&sol;div>&NewLine;<pre class&equals;"highlight">Criteria criteria &equals; session&period;createCriteria&lpar;Student&period;class&rpar;&semi; &NewLine;<&sol;pre>&NewLine;<h2> 2&period; <b>The Criteria API supports all the comparision operators<&sol;b><&sol;h2>&NewLine;<div><&sol;div>&NewLine;<div style&equals;"color&colon; &num;20124d&semi;">such as &equals;&comma; &lt&semi;&comma; &gt&semi;&comma; &gt&semi;&equals;&comma;&equals;&lt&semi;&comma; etc in the supported Expression class eq&lpar;&rpar;&comma; lt&lpar;&rpar;&comma; gt&lpar;&rpar;&comma; le&lpar;&rpar; &comma; ge&lpar;&rpar; respectively&period;<&sol;div>&NewLine;<pre class&equals;"highlight">Criteria criteria &equals; session&period;createCriteria&lpar;Student&period;class&rpar;&semi; &NewLine; &NewLine;criteria&period;add&lpar;Restrictions&period;eq&lpar;"studentName"&comma; "Dinesh Rajput"&rpar;&rpar;&semi; &NewLine; &NewLine;criteria&period;add&lpar;Restrictions&period;le&lpar;"rollNumber"&comma; 1&rpar;&rpar;&semi; &NewLine; &NewLine;<&sol;pre>&NewLine;<&sol;div>&NewLine;<h2 style&equals;"color&colon; blue&semi;"><b>3&period; Criteria ordering query<&sol;b><&sol;h2>&NewLine;<div style&equals;"color&colon; &num;20124d&semi;">The result is sort by &&num;8220&semi;studentName&&num;8221&semi; in ascending order&period;<&sol;div>&NewLine;<pre class&equals;"highlight">Criteria criteria &equals; session&period;createCriteria&lpar;Student&period;class&rpar;&semi; &NewLine;criteria&period;addOrder&lpar;Order&period;asc&lpar;"studentName"&rpar;&rpar;&semi; &NewLine;<&sol;pre>&NewLine;<p>The result is sort by &&num;8220&semi;studentName&&num;8221&semi; in descending order&period;<&sol;p>&NewLine;<pre class&equals;"highlight">Criteria criteria &equals; session&period;createCriteria&lpar;Student&period;class&rpar;&semi; &NewLine;criteria&period;addOrder&lpar;Order&period;desc&lpar;"studentName"&rpar;&rpar;&semi; &NewLine;<&sol;pre>&NewLine;<h2 style&equals;"color&colon; blue&semi;"><b>4&period; Criteria paging the result<&sol;b><&sol;h2>&NewLine;<div><&sol;div>&NewLine;<div style&equals;"color&colon; &num;20124d&semi;">Criteria provide some functions to make pagination extremely easy&period; Starting from the 5th record&comma; and retrieve the next 10 records from database&period;<&sol;div>&NewLine;<pre class&equals;"highlight">Criteria criteria &equals; session&period;createCriteria&lpar;Student&period;class&rpar;&semi; &NewLine;criteria&period;setMaxResults&lpar;10&rpar;&semi; &NewLine;criteria&period;setFirstResult&lpar;5&rpar;&semi; &NewLine;<&sol;pre>&NewLine;<div id&equals;"ads-id" align&equals;"center"><&sol;div>&NewLine;<h2><b>Problem with Criteria API<&sol;b><&sol;h2>&NewLine;<div style&equals;"color&colon; &num;20124d&semi;"><b>1&period; Performance issue<&sol;b><&sol;div>&NewLine;<div style&equals;"color&colon; &num;20124d&semi;">You have no way to control the SQL query generated by Hibernate&comma; if the generated query is slow&comma; you are very hard to tune the query&comma; and your database administrator may not like it&period;<&sol;div>&NewLine;<div style&equals;"color&colon; &num;20124d&semi;"><&sol;div>&NewLine;<div style&equals;"color&colon; &num;20124d&semi;"><b>2&period; Maintenance issue<&sol;b><&sol;div>&NewLine;<div style&equals;"color&colon; &num;20124d&semi;">All the SQL queries are scattered through the Java code&comma; when a query went wrong&comma; you may spend time to find the problem query in your application&period; On the others hand&comma; named queries stored in the Hibernate mapping files are much more easier to maintain&period;<&sol;div>&NewLine;<&sol;div>&NewLine;<p><b>Student&period;java<&sol;b><&sol;p>&NewLine;<pre class&equals;"highlight">package com&period;sdnext&period;hibernate&period;tutorial&period;dto&semi; &NewLine; &NewLine;import java&period;io&period;Serializable&semi; &NewLine; &NewLine;import javax&period;persistence&period;Column&semi; &NewLine;import javax&period;persistence&period;Entity&semi; &NewLine;import javax&period;persistence&period;GeneratedValue&semi; &NewLine;import javax&period;persistence&period;GenerationType&semi; &NewLine;import javax&period;persistence&period;Id&semi; &NewLine;import javax&period;persistence&period;Table&semi; &NewLine; &NewLine;&commat;Entity &NewLine;&commat;Table&lpar;name&equals;"STUDENT"&rpar; &NewLine;public class Student implements Serializable &NewLine;&lbrace; &NewLine; &NewLine; &sol;&ast;&ast; &NewLine; &ast; serialVersionUID &NewLine; &ast;&sol; &NewLine; private static final long serialVersionUID &equals; 8633415090390966715L&semi; &NewLine; &commat;Id &NewLine; &commat;Column&lpar;name&equals;"ID"&rpar; &NewLine; &commat;GeneratedValue&lpar;strategy&equals;GenerationType&period;AUTO&rpar; &NewLine; private int id&semi; &NewLine; &commat;Column&lpar;name&equals;"STUDENT&lowbar;NAME"&rpar; &NewLine; private String studentName&semi; &NewLine; &commat;Column&lpar;name&equals;"ROLL&lowbar;NUMBER"&rpar; &NewLine; private int rollNumber&semi; &NewLine; &commat;Column&lpar;name&equals;"COURSE"&rpar; &NewLine; private String course&semi; &NewLine; public int getId&lpar;&rpar; &lbrace; &NewLine; return id&semi; &NewLine; &rcub; &NewLine; public void setId&lpar;int id&rpar; &lbrace; &NewLine; this&period;id &equals; id&semi; &NewLine; &rcub; &NewLine; public String getStudentName&lpar;&rpar; &lbrace; &NewLine; return studentName&semi; &NewLine; &rcub; &NewLine; public void setStudentName&lpar;String studentName&rpar; &lbrace; &NewLine; this&period;studentName &equals; studentName&semi; &NewLine; &rcub; &NewLine; public int getRollNumber&lpar;&rpar; &lbrace; &NewLine; return rollNumber&semi; &NewLine; &rcub; &NewLine; public void setRollNumber&lpar;int rollNumber&rpar; &lbrace; &NewLine; this&period;rollNumber &equals; rollNumber&semi; &NewLine; &rcub; &NewLine; public String getCourse&lpar;&rpar; &lbrace; &NewLine; return course&semi; &NewLine; &rcub; &NewLine; public void setCourse&lpar;String course&rpar; &lbrace; &NewLine; this&period;course &equals; course&semi; &NewLine; &rcub; &NewLine; public String toString&lpar;&rpar; &NewLine; &lbrace; &NewLine; return "ROLL Number&colon; "&plus;rollNumber&plus;"&vert; Name&colon; "&plus;studentName&plus;"&vert; Course&colon; "&plus;course&semi; &NewLine; &rcub; &NewLine;&rcub; &NewLine;<&sol;pre>&NewLine;<p><b>hibernate&period;cfg&period;xml<&sol;b><&sol;p>&NewLine;<pre class&equals;"highlight">&lt&semi;hibernate-configuration&gt&semi; &NewLine; &lt&semi;session-factory&gt&semi; &NewLine; &lt&semi;&excl;-- Database connection settings --&gt&semi; &NewLine; &lt&semi;property name&equals;"connection&period;driver&lowbar;class"&gt&semi;com&period;mysql&period;jdbc&period;Driver&lt&semi;&sol;property&gt&semi; &NewLine; &lt&semi;property name&equals;"connection&period;url"&gt&semi;jdbc&colon;mysql&colon;&sol;&sol;localhost&colon;3306&sol;hibernateDB2&lt&semi;&sol;property&gt&semi; &NewLine; &lt&semi;property name&equals;"connection&period;username"&gt&semi;root&lt&semi;&sol;property&gt&semi; &NewLine; &lt&semi;property name&equals;"connection&period;password"&gt&semi;root&lt&semi;&sol;property&gt&semi; &NewLine; &NewLine; &lt&semi;&excl;-- JDBC connection pool &lpar;use the built-in&rpar; --&gt&semi; &NewLine; &lt&semi;property name&equals;"connection&period;pool&lowbar;size"&gt&semi;1&lt&semi;&sol;property&gt&semi; &NewLine; &NewLine; &lt&semi;&excl;-- SQL dialect --&gt&semi; &NewLine; &lt&semi;property name&equals;"dialect"&gt&semi;org&period;hibernate&period;dialect&period;MySQLDialect&lt&semi;&sol;property&gt&semi; &NewLine; &NewLine; &lt&semi;&excl;-- Enable Hibernate's automatic session context management --&gt&semi; &NewLine; &lt&semi;property name&equals;"current&lowbar;session&lowbar;context&lowbar;class"&gt&semi;thread&lt&semi;&sol;property&gt&semi; &NewLine; &NewLine; &lt&semi;&excl;-- Disable the second-level cache --&gt&semi; &NewLine; &lt&semi;property name&equals;"cache&period;provider&lowbar;class"&gt&semi;org&period;hibernate&period;cache&period;NoCacheProvider&lt&semi;&sol;property&gt&semi; &NewLine; &NewLine; &lt&semi;&excl;-- Echo all executed SQL to stdout --&gt&semi; &NewLine; &lt&semi;property name&equals;"show&lowbar;sql"&gt&semi;true&lt&semi;&sol;property&gt&semi; &NewLine; &NewLine; &lt&semi;&excl;-- Drop and re-create the database schema on startup --&gt&semi; &NewLine; &lt&semi;property name&equals;"hbm2ddl&period;auto"&gt&semi;update&lt&semi;&sol;property&gt&semi; &NewLine; &NewLine; &NewLine; &lt&semi;mapping class&equals;"com&period;sdnext&period;hibernate&period;tutorial&period;dto&period;Student"&gt&semi; &NewLine; &NewLine; &lt&semi;&sol;mapping&gt&semi;&lt&semi;&sol;session-factory&gt&semi; &NewLine; &lt&semi;&sol;hibernate-configuration&gt&semi; &NewLine;<&sol;pre>&NewLine;<p><b>HibernateTestDemo&period;java<&sol;b><&sol;p>&NewLine;<pre class&equals;"highlight">package com&period;sdnext&period;hibernate&period;tutorial&semi; &NewLine; &NewLine;import java&period;util&period;List&semi; &NewLine; &NewLine;import org&period;hibernate&period;Criteria&semi; &NewLine;import org&period;hibernate&period;Session&semi; &NewLine;import org&period;hibernate&period;SessionFactory&semi; &NewLine;import org&period;hibernate&period;cfg&period;AnnotationConfiguration&semi; &NewLine;import org&period;hibernate&period;criterion&period;Restrictions&semi; &NewLine; &NewLine;import com&period;sdnext&period;hibernate&period;tutorial&period;dto&period;Student&semi; &NewLine; &NewLine; &NewLine;public class HibernateTestDemo &lbrace; &NewLine; &NewLine; &sol;&ast;&ast; &NewLine; &ast; &commat;param args &NewLine; &ast;&sol; &NewLine; public static void main&lpar;String&lbrack;&rsqb; args&rpar; &NewLine; &lbrace; &NewLine; SessionFactory sessionFactory &equals; new AnnotationConfiguration&lpar;&rpar;&period;configure&lpar;&rpar;&period;buildSessionFactory&lpar;&rpar;&semi; &NewLine; Session session &equals; sessionFactory&period;openSession&lpar;&rpar;&semi; &NewLine; session&period;beginTransaction&lpar;&rpar;&semi; &NewLine; &NewLine; Criteria criteria &equals; session&period;createCriteria&lpar;Student&period;class&rpar;&semi; &NewLine; criteria&period;add&lpar;Restrictions&period;eq&lpar;"studentName"&comma; "Dinesh Rajput"&rpar;&rpar;&semi; &NewLine; &NewLine; List students &equals; criteria&period;list&lpar;&rpar;&semi; &NewLine; &NewLine; for&lpar;Student student &colon; students&rpar; &NewLine; &lbrace; &NewLine; System&period;out&period;println&lpar;student&rpar;&semi; &NewLine; &rcub; &NewLine; session&period;getTransaction&lpar;&rpar;&period;commit&lpar;&rpar;&semi; &NewLine; session&period;close&lpar;&rpar;&semi; &NewLine; &rcub; &NewLine; &NewLine;&rcub; &NewLine;<&sol;pre>&NewLine;<div style&equals;"background-color&colon; &num;ff99cc&semi; border-width&colon; thin&semi; border&colon; solid&semi;">&NewLine;<div style&equals;"color&colon; blue&semi;"><b>Output&colon;<&sol;b><&sol;div>&NewLine;<div style&equals;"color&colon; red&semi;">log4j&colon;WARN No appenders could be found for logger &lpar;org&period;hibernate&period;cfg&period;annotations&period;Version&rpar;&period;<&sol;div>&NewLine;<div style&equals;"color&colon; red&semi;">log4j&colon;WARN Please initialize the log4j system properly&period;<&sol;div>&NewLine;<p>Hibernate&colon; select this&lowbar;&period;ID as ID0&lowbar;0&lowbar;&comma; this&lowbar;&period;COURSE as COURSE0&lowbar;0&lowbar;&comma; this&lowbar;&period;ROLL&lowbar;NUMBER as ROLL3&lowbar;0&lowbar;0&lowbar;&comma; this&lowbar;&period;STUDENT&lowbar;NAME as STUDENT4&lowbar;0&lowbar;0&lowbar; from STUDENT this&lowbar; where this&lowbar;&period;STUDENT&lowbar;NAME&equals;&quest;<br &sol;>&NewLine;<b>ROLL Number&colon; 1&vert; Name&colon; Dinesh Rajput&vert; Course&colon; MCA<&sol;b><&sol;p>&NewLine;<&sol;div>&NewLine;<div class&equals;"separator" style&equals;"clear&colon; both&semi; text-align&colon; center&semi;"><&sol;div>&NewLine;<div class&equals;"separator" style&equals;"clear&colon; both&semi; text-align&colon; center&semi;"><img src&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;wp-content&sol;uploads&sol;2016&sol;12&sol;criteria&period;jpg" width&equals;"640" height&equals;"124" border&equals;"0" &sol;><&sol;div>&NewLine;<p>&nbsp&semi;<&sol;p>&NewLine;<&sol;div>&NewLine;<p><b> In the <a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;p&sol;understanding-restrictions&period;html">Next Chapter<&sol;a> we will discuss more about the <a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;p&sol;understanding-restrictions&period;html">Criteria Query with Restriction<&sol;a>&period;<&sol;b><br &sol;>&NewLine;<b><br &sol;>&NewLine;<&sol;b> <b><br &sol;>&NewLine;&lt&semi;&lt&semi;<a style&equals;"font-family&colon; Times&comma; 'Times New Roman'&comma; serif&semi;" href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;p&sol;named-queries&period;html">Previous Chapter 29<&sol;a>&lt&semi;&lt&semi;    <a href&equals;"https&colon;&sol;&sol;dineshonjava&period;com&sol;p&sol;understanding-restrictions&period;html">&gt&semi;&gt&semi;Next Chapter 31<&sol;a>&gt&semi;&gt&semi;<&sol;b><&sol;p>&NewLine;<p>&nbsp&semi;<&sol;p>&NewLine;<&sol;div>&NewLine;