{"id":197,"date":"2016-02-11T23:08:20","date_gmt":"2016-02-11T23:08:20","guid":{"rendered":"http:\/\/kaizen-koka.com\/?p=197"},"modified":"2018-11-22T00:28:29","modified_gmt":"2018-11-22T00:28:29","slug":"hibernate","status":"publish","type":"post","link":"https:\/\/kaizen-koka.com\/?p=197","title":{"rendered":"Hibernate"},"content":{"rendered":"<p class=\"brush:xml;\">\n\t<span style=\"font-size:14px;\"><span style=\"font-family:tahoma,geneva,sans-serif;\">DOCS : <a href=\"https:\/\/docs.jboss.org\/hibernate\/orm\/5.2\/userguide\/html_single\/Hibernate_User_Guide.html\">https:\/\/docs.jboss.org\/hibernate\/orm\/5.2\/userguide\/html_single\/Hibernate_User_Guide.html<\/a><br \/>\n\tPOSTGRES: <a href=\"https:\/\/mvnrepository.com\/artifact\/org.postgresql\/postgresql\">https:\/\/mvnrepository.com\/artifact\/org.postgresql\/postgresql<\/a><\/span><\/span><br \/>\n\t<span style=\"font-family:tahoma,geneva,sans-serif;\">HIBERNATE REPOS: <a href=\"https:\/\/mvnrepository.com\/artifact\/org.hibernate\">https:\/\/mvnrepository.com\/artifact\/org.hibernate<\/a><\/span>\n<\/p>\n<p class=\"brush:xml;\">\n\t<span style=\"font-family:verdana,geneva,sans-serif;\">If you encounter any compatabile issues. pick the right version of postgres..<\/span>&nbsp;\n<\/p>\n<p class=\"brush:xml;\">\n\t&nbsp;\n<\/p>\n<pre>\r\n &lt;dependency&gt;\r\n    &lt;groupId&gt;org.postgresql&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;postgresql&lt;\/artifactId&gt;\r\n    &lt;version&gt;42.2.1&lt;\/version&gt;\r\n  &lt;\/dependency&gt;\r\n  &lt;dependency&gt;\r\n    &lt;groupId&gt;org.hibernate&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;hibernate-core&lt;\/artifactId&gt;\r\n    &lt;version&gt;5.2.2.Final&lt;\/version&gt;\r\n  &lt;\/dependency&gt;\r\n  &lt;dependency&gt;\r\n    &lt;groupId&gt;org.hibernate&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;hibernate-ehcache&lt;\/artifactId&gt;\r\n    &lt;version&gt;5.2.2.Final&lt;\/version&gt;\r\n  &lt;\/dependency&gt;\r\n  &lt;dependency&gt;\r\n    &lt;groupId&gt;net.sf.ehcache&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;ehcache&lt;\/artifactId&gt;\r\n    &lt;version&gt;2.10.1&lt;\/version&gt;\r\n    &lt;type&gt;pom&lt;\/type&gt;\r\n  &lt;\/dependency&gt;\r\n  &lt;dependency&gt;\r\n    &lt;groupId&gt;net.sf.ehcache&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;ehcache-core&lt;\/artifactId&gt;\r\n    &lt;version&gt;2.6.9&lt;\/version&gt;\r\n  &lt;\/dependency&gt;\r\n  &lt;dependency&gt;\r\n    &lt;groupId&gt;org.slf4j&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;slf4j-simple&lt;\/artifactId&gt;\r\n    &lt;version&gt;1.7.5&lt;\/version&gt;\r\n  &lt;\/dependency&gt;\r\n&lt;\/dependencies&gt;<\/pre>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>.What is Hibernate? Advantage over other persistent implementations?<\/strong><br \/>\n\t&nbsp; &nbsp;As per as persistent implementation is concered hibernate is the best ORM tool because of the following feature<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\">&#8211; Auto DDL( Data Defination Language ) support<br \/>\n\t&#8211; HQL Support (DB independent Queries)<br \/>\n\t&#8211; Cache Support<br \/>\n\t&#8211; PK(primary key) generator support<br \/>\n\t&#8211; Data Validation Support (using Annotations)<br \/>\n\t&#8211; All exceptions are runtime exceptions in Hibernate<br \/>\n\t&#8211; ORM(Object-relational Mapping) Support Collections, inheritance, polymorphism and (uni and bidirectional relationship). And also supports one-to-one, one-to-many and many-to-many associations.<br \/>\n\t&#8211; Batch updates<br \/>\n\t&#8211; Lazy Initialization&nbsp;<br \/>\n\t&#8211; OGM(Object-graph Mapping) (for DataBases like NO SQL)<br \/>\n\t&#8211; Search Feature<br \/>\n\t&#8211; in-Built connection-pool support.<br \/>\n\t&#8211; Support for native queries based on the dialect used.&nbsp;<br \/>\n\t&#8211; Support criteria queries (We can do join and compilated queries easily using criterial queries)<br \/>\n\t&#8211; No source code retranslation or byte code retranslation.<br \/>\n\t&#8211; Supports transaction management and concurrency control.<br \/>\n\t&#8211; No need to write jdbc statements.<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>High level APIs:<\/strong><br \/>\n\t&nbsp;<strong>.&nbsp;<\/strong>Transient Object (normal java object )<br \/>\n\t&nbsp;<strong>.&nbsp;<\/strong>Persistent Object (once object is attched to Hibernate)<br \/>\n\t&nbsp;<strong>.&nbsp;<\/strong>Detached Object (once object removed from Hibernate)<br \/>\n\t&nbsp;<strong>.&nbsp;<\/strong>Session Factory<br \/>\n\t&nbsp;<strong>.&nbsp;<\/strong>Session<br \/>\n\t&nbsp;<strong>.&nbsp;<\/strong>Transaction<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>Low level API:(Used by hibernate API internally)<\/strong><br \/>\n\t<strong>.&nbsp;<\/strong>TransactionFactory (normal java object )<br \/>\n\t<strong>.&nbsp;<\/strong>ConnectionProvider(Factory)<br \/>\n\t<strong>.&nbsp;<\/strong>JTA(Java Transaction API)<br \/>\n\t<strong>.&nbsp;<\/strong>JNDI API<br \/>\n\t<strong>.&nbsp;<\/strong>JDBC API<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>SessionFactory :(org.hibernate.SessionFactory)<\/strong><br \/>\n\t&nbsp;&#8211; SessionFactory is a thread-safe<br \/>\n\t&nbsp;&#8211; Once SessionFactory for one DB for the entire Application<br \/>\n\t&nbsp;&#8211; It&#39;s factory for session.<br \/>\n\t&nbsp;&#8211; It acts as a client for ConnectionProvider<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>Session :(org.hibernate.Session)<\/strong><br \/>\n\t&nbsp;&#8211; Session is single threaded short lived object represents a conversation between application and database.<br \/>\n\t&nbsp;&#8211; Its a factory for Transactions<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>Transaction: (org.hibernate.Transaction)<\/strong><br \/>\n\t&nbsp;&#8211; Transaction is a single threaded shortlived object used by the application to specify the atomic untis of work.<br \/>\n\t&nbsp;&#8211; Abstracts or hides the application from JDBC, JTA Transactions<br \/>\n\t&nbsp;&#8211; A session might span serval transactions in some cases.<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>ConnectionProvider (org.hibernate.connection.ConnectionProvider)<\/strong><br \/>\n\t&nbsp;-Its a factory of JDBC connections.<br \/>\n\t&nbsp;-Hides the application from underlying datasource and driver manager.<br \/>\n\t&nbsp;-Its not exposed to applications, i.e used by hibernate framework internally<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>TransactionFactory (org.hibernate.TransactionFactory)<\/strong><br \/>\n\t&nbsp;&#8211; It&#39;s a factory for transaction object and its not exposed to Application<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>Persistent Object <\/strong>:&nbsp;<br \/>\n\t&nbsp;&#8211; These are shortlived single threaded objects containing persistent state. These might be oridnary java beans or pojo(plain old java objects)<br \/>\n\t&nbsp;&#8211; The only special thing about these objects is that &#8211; they assoicates with exactly one session.<br \/>\n\t&nbsp;&#8211; As soon as the session is closed they will be detached and free to use any where<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>&nbsp;Transient and Detached Obejects:<\/strong><br \/>\n\t&nbsp;&#8211; These objects are not associated with the session<br \/>\n\t&nbsp;&#8211; The transient instance has never been assoicated with any persistent context i.e it has not persistent identity<\/span><\/span>\n<\/p>\n<p>\n\t<br \/>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>In order to develop Hibernate Application<\/strong><br \/>\n\t1. pojo class&nbsp;<br \/>\n\t2. mapping file<br \/>\n\t3. configuration file&nbsp;<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>Rules:<\/strong><br \/>\n\t..Pojo class must contain required persistent fields<br \/>\n\t..Pojo class must contain default constructor<br \/>\n\t..In Pojo, each property should contain public setter\/getter<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>..Mapping file<\/strong><br \/>\n\t${tablename\/objectname}.hbm.xml<br \/>\n\tstudent.hbm.xml<\/span><\/span><br \/>\n\t&nbsp;\n<\/p>\n<pre class=\"brush:xml;\">\r\n&lt;?xml version=&quot;1.0&quot;?&gt;\r\n&lt;!DOCTYPE hibernate-mapping PUBLIC &quot;-\/\/Hibernate\/Hibernate Mapping DTD 3.0\/\/EN&quot;\r\n        &quot;http:\/\/hibernate.sourceforge.net\/hibernate-mapping-3.0.dtd&quot;&gt;\r\n\r\n&lt;hibernate-mapping&gt;\r\n    &lt;class name=&quot;com.bellinfo.hibernate.Student&quot; table=&quot;STUDENT&quot; schema=&quot;hibernate1&quot;&gt;\r\n      &lt;id name=&quot;studentId&quot;\/&gt;\r\n      &lt;property name=&quot;name&quot;\/&gt;\r\n      &lt;property name=&quot;createdDate&quot;\/&gt;\r\n    &lt;\/class&gt;\r\n&lt;\/hibernate-mapping&gt;<\/pre>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\">&nbsp;<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>..Configuration file<\/strong><br \/>\n\thibernate.cfg.xml<br \/>\n\t&nbsp;-DB Driver proerpties<br \/>\n\t&nbsp;-DB ConnectionPool properties<br \/>\n\t&nbsp;-hibernate Commands<br \/>\n\t&nbsp;-Attach mapping file<\/span><\/span>\n<\/p>\n<pre class=\"brush:xml;\">\r\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;\r\n&lt;!DOCTYPE hibernate-configuration PUBLIC\r\n        &quot;-\/\/Hibernate\/Hibernate Configuration DTD 3.0\/\/EN&quot;\r\n        &quot;http:\/\/hibernate.sourceforge.net\/hibernate-configuration-3.0.dtd&quot;&gt;\r\n\r\n&lt;hibernate-configuration&gt;\r\n    &lt;session-factory&gt;\r\n        &lt;property name=&quot;hibernate.connection.driver_class&quot;&gt;org.postgresql.Driver&lt;\/property&gt;\r\n        &lt;property name=&quot;hibernate.connection.url&quot;&gt;jdbc:postgresql:\/\/localhost\/hibernate1&lt;\/property&gt;\r\n        &lt;property name=&quot;hibernate.connection.username&quot;&gt;postgres&lt;\/property&gt;\r\n        &lt;property name=&quot;hibernate.connection.password&quot;&gt;bellinfo&lt;\/property&gt;\r\n        &lt;property name=&quot;hibernate.dialect&quot;&gt;org.hibernate.dialect.ProgressDialect&lt;\/property&gt;\r\n      &lt;!-- create, update, create-drop, validate --&gt;\r\n        &lt;property name=&quot;hbm2ddl.auto&quot;&gt;create&lt;\/property&gt;\r\n        &lt;property name=&quot;hibernate.default_schema&quot;&gt;hibernate1&lt;\/property&gt;\r\n        &lt;property name=&quot;show_sql&quot;&gt;true&lt;\/property&gt;\r\n\r\n        &lt;mapping resource=&quot;student.hbm.xml&quot;\/&gt;\r\n    &lt;\/session-factory&gt;\r\n&lt;\/hibernate-configuration&gt;<\/pre>\n<p>\n\t<strong>Equivalent Java Code for CFG file<\/strong>\n<\/p>\n<pre class=\"brush:java;\">\r\n  public static SessionFactory newSessionFactory() {\r\n\r\n        Properties properties = new Properties();\r\n        properties.put(&quot;hibernate.dialect&quot;, &quot;org.hibernate.dialect.PostgreSQLDialect&quot;);\r\n        properties.put(&quot;hibernate.hbm2ddl.auto&quot;, &quot;update&quot;);\r\n        properties.put(&quot;hibernate.show_sql&quot;, &quot;true&quot;);\r\n        properties.put(&quot;hibernate.connection.driver_class&quot;, &quot;org.postgresql.Driver&quot;);\r\n        properties.put(&quot;hibernate.connection.url&quot;, &quot;jdbc:postgresql:\/\/127.0.0.1:5432\/mydb&quot;);\r\n        properties.put(&quot;hibernate.connection.username&quot;, &quot;admin&quot;);\r\n        properties.put(&quot;hibernate.connection.password&quot;, &quot;IscanU#1&quot;);\r\n\r\n        return new Configuration()\r\n                .addProperties(properties)\r\n                .addAnnotatedClass(Customer.class)\r\n                .addAnnotatedClass(Department.class)\r\n                .addAnnotatedClass(Employee.class)\r\n                .buildSessionFactory(\r\n                        new StandardServiceRegistryBuilder()\r\n                                .applySettings(properties)\r\n                                .build()\r\n                );\r\n    }<\/pre>\n<p>\n\t<strong>Java Code to connect<\/strong>\n<\/p>\n<pre class=\"brush:java;\">\r\n public static void main(String args[]){\r\n\r\n       Student std = new Student();\r\n       std.setStudentId(1);\r\n       std.setName(&quot;siva&quot;);\r\n       std.setCreatedDate(new Date());\r\n       \/\/student state is transient\r\n       Configuration cfg = new Configuration().configure(&quot;hibernate.cfg.xml&quot;);\r\n       SessionFactory sf = cfg.buildSessionFactory();\r\n       Session session = sf.openSession();\r\n       Transaction transaction = session.beginTransaction();\r\n       session.save(std);\r\n       \/\/object state is persistent\r\n       transaction.commit();\r\n       \/\/object will be moved to database\r\n       session.evict(std);\r\n       \/\/from here object is eligible for garbage collection.\r\n\r\n       session.close();\r\n\r\n       sf.close();\r\n   }<\/pre>\n<p>\n\t<strong><span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\">hbm2ddl.auto allows the following options:<\/span><\/span><\/strong>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>create<\/strong> &#8211; drop exsisting tables and create new tables<br \/>\n\t<strong>update<\/strong> &#8211; If any table required, it just creates. If required, it will do alter operation. else it will as is<br \/>\n\t<strong>create-drop <\/strong>&#8211; drop-create-drop &nbsp;when you call sessionfactory.close() then it will drop the tables.<br \/>\n\t<strong>validate<\/strong> &#8211; validates mapping schema against table schema. Required column not found in table.<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>..insert record:<\/strong><br \/>\n\tsave(object) &nbsp; -&gt; rt primary key(Integer)<br \/>\n\tpersist(object) &nbsp;-&gt; rt void&nbsp;<br \/>\n\tsession.saveOrUpdate(object) -&gt; rt void &nbsp;-&gt; if data avaliable in RDB and if your object modified for any attribute then it will just update column (which means select and update or insert)<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>..update record: <\/strong>(possible on non-pk feilds, update will update entire column)<br \/>\n\tsession.update(object) &nbsp; -&gt;If your session contains already the update record then update() doesn&#39;t work<br \/>\n\tsession.merge(object) &#8211; it will update the data at any cost<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>..delete record:<\/strong><br \/>\n\t-session.delete(object)<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>..select record:<\/strong> (Transaction is not required)<br \/>\n\t<strong>Object get(Class var1, Serializable var2)<\/strong><br \/>\n\t&#8211; select will be called whenever you trigger the get() method<br \/>\n\t&#8211; earger loading and it gurantee the record<br \/>\n\t&#8211; if record not found, then it will return null and end-up getting null pointer exception.<br \/>\n\t<strong>Object load(Class var1, Serializable var2)<\/strong><br \/>\n\t&#8211; select will be called whenever you try to access non-pk attribute<br \/>\n\t&#8211; so, you don&#39;t any null pointer exception.<br \/>\n\t&#8211; lazy loading and it doesn&#39;t gurantee the record until you call whether the record is avaliable or not.<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>..Primary Key Auto Generators<\/strong>&#8211; <\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\">&#8211; assigned (default) * user is responsible<br \/>\n\t&#8211; increment &nbsp;* auto +1 increment<br \/>\n\t&#8211; sequence (DataBase and Application responsible)<br \/>\n\t&#8211; identity (DataBase should support)&nbsp;<br \/>\n\t&#8211; native ( sequence, identity, or hilo)<br \/>\n\t&#8211; foreign (<br \/>\n\t&#8211; hilo &nbsp;(increment by 32768)<br \/>\n\t&#8211; seqhilo&nbsp;<br \/>\n\t&#8211; custom generators<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>Postgres Dialects avalaible:<\/strong><br \/>\n\torg.hibernate.dialect.PostgreSQL82Dialect<br \/>\n\torg.hibernate.dialect.ProgressDialect<\/span><\/span>\n<\/p>\n<pre class=\"brush:sql;\">\r\nCREATE SEQUENCE hibschema.hibernate_sequence1\r\n  INCREMENT 1\r\n  MINVALUE 1\r\n  MAXVALUE 9223372036854775807\r\n  START 5\r\n  CACHE 1;<\/pre>\n<pre class=\"brush:xml;\">\r\n      &lt;id name=&quot;studentId&quot; &gt;\r\n          &lt;generator class=&quot;sequence&quot;&gt;\r\n              &lt;param name=&quot;sequence&quot;&gt;registration_sequence&lt;\/param&gt;\r\n          &lt;\/generator&gt;\r\n      &lt;\/id&gt;<\/pre>\n<hr \/>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\"><strong>HQL: for crud operations<\/strong><br \/>\n\t&nbsp;&#8211; Database independent<br \/>\n\t&nbsp;&#8211; Need to write queries based on your bean class and its attribute<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">DUL:&nbsp;<br \/>\n\t&nbsp;&nbsp; &nbsp;executeUpdate()<br \/>\n\tDRL :<br \/>\n\t&nbsp;&nbsp; &nbsp;uiqueResult()<br \/>\n\t&nbsp;&nbsp; &nbsp;list()<\/span><\/span>\n<\/p>\n<p>\n\t<strong><span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">Insert :<\/span><\/span><\/strong>\n<\/p>\n<pre class=\"brush:java;\">\r\n \t   String hql = &quot;insert into StudentNew(studentId, name, createdDate) select s.studentId,s.name, s.createdDate from Student s&quot;;\r\n       Query q = session.createQuery(hql);\r\n       int rows = q.executeUpdate();\r\n       System.out.println(&quot;no. of rows afftected :&quot; + rows);\r\n       transaction.commit();\r\n       session.close();<\/pre>\n<p>\n\t<strong><span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">Update :&nbsp;<\/span><\/span><\/strong>\n<\/p>\n<pre class=\"brush:java;\">\r\n       String hql_update = &quot;update Student set name=&#39;teju&#39; where studentId=&#39;1&#39;&quot;;\r\n       Query q = session.createQuery(hql_update);\r\n       int rows = q.executeUpdate();\r\n       System.out.println(&quot;no. of rows afftected :&quot; + rows);\r\n       transaction.commit();\r\n       session.close();<\/pre>\n<p>\n\t<br \/>\n\t<strong><span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">Delete :<\/span><\/span><\/strong>\n<\/p>\n<pre class=\"brush:java;\">\r\n       String hql_delete = &quot;delete Student where studentId=&#39;1&#39;&quot;;\r\n       Query q = session.createQuery(hql_delete);\r\n       int rows = q.executeUpdate();\r\n       System.out.println(&quot;no. of rows afftected :&quot; + rows);\r\n       transaction.commit();\r\n       session.close();<\/pre>\n<p>\n\t<br \/>\n\t<strong><span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">Read :<\/span><\/span><\/strong>\n<\/p>\n<p>\n\tRetrieve Student record where student id is 4\n<\/p>\n<pre class=\"brush:java;\">\r\n       \/* Retrieve Student record where student id is 4*\/\r\n       String hql_select =&quot;from Student where studentId=&#39;4&#39;&quot;;\r\n       Query q = session.createQuery(hql_select);\r\n       Student sd = (Student)q.uniqueResult();\r\n       System.out.println(sd);\r\n       session.close(); <\/pre>\n<p>\n\tRetrive all the student records\n<\/p>\n<pre class=\"brush:java;\">\r\n       String hql_select =&quot;from Student&quot;;\r\n       Query q = session.createQuery(hql_select);\r\n       List&lt;Student&gt; sdList = q.list();\r\n       for(Student s:sdList){\r\n           System.out.println(s);\r\n       }\r\n       transaction.commit();\r\n       session.close();<\/pre>\n<p>\n\tRetrive student names from Student\n<\/p>\n<pre class=\"brush:java;\">\r\n       String hql_select =&quot;select name from Student &quot;;\r\n       Query q = session.createQuery(hql_select);\r\n       List&lt;String&gt; nameList = q.list();\r\n       for(String s:nameList){\r\n           System.out.println(s);\r\n       }\r\n       session.close();<\/pre>\n<p>\n\tTo Extract more then one column\n<\/p>\n<pre class=\"brush:java;\">\r\n       String hql_select =&quot;select studentId, name from Student &quot;;\r\n       Query q = session.createQuery(hql_select);\r\n       List&lt;Object&gt; list = q.list();\r\n       for(Object obj:list){\r\n           Object[] array = (Object[]) obj;\r\n           System.out.println(array[0]);\r\n           System.out.println(array[1]);\r\n       }\r\n       session.close();\r\n<\/pre>\n<p>\n\tAggregate Functions avg, count, first, last, max, min, sum\n<\/p>\n<pre class=\"brush:java;\">\r\n       String hql_select =&quot;select avg(studentId) from Student&quot;;\r\n       Query q = session.createQuery(hql_select);\r\n       Double maxID = (Double)q.uniqueResult();\r\n       System.out.println(maxID.doubleValue());\r\n       session.close();<\/pre>\n<hr \/>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\"><strong>Criteria Queries :<\/strong>&nbsp;<br \/>\n\t-used for select operation by applying conditions<br \/>\n\t-Restrcitions are for conditions (eq, gt, )<br \/>\n\t-Projections are for particular column operations and aggregate functions<br \/>\n\t&nbsp;<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">Simple Criteria to retrive all records from Student table<\/span><\/span>\n<\/p>\n<pre class=\"brush:java;\">\r\nCriteria c = session.createCriteria(Student.class);\r\n       List&lt;Student&gt; studList = c.list();\r\n       for(Student s:studList){\r\n        System.out.println(s);\r\n       }\r\n       session.close();<\/pre>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">extract a student data where studentId equals 4<\/span><\/span>\n<\/p>\n<pre class=\"brush:java;\">\r\n       Criteria c = session.createCriteria(Student.class);\r\n       Criterion cr  = Restrictions.eq(&quot;studentId&quot;, 4);\r\n       c.add(cr);\r\n       Student s =(Student) c.uniqueResult();\r\n       System.out.println(s);\r\n       session.close();<\/pre>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">&nbsp;<\/span><\/span><span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">extract all the student objects where studentid greater than 4&nbsp;<\/span><\/span>\n<\/p>\n<pre class=\"brush:php;\">\r\n      Criteria c = session.createCriteria(Student.class);\r\n       Criterion cr  = Restrictions.gt(&quot;studentId&quot;, 4);\r\n       c.add(cr);\r\n       List&lt;Student&gt; list = c.list();\r\n       for(Student s:list)\r\n       System.out.println(s);\r\n       session.close();<\/pre>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">extract all the student names where studentid greater than 4<\/span><\/span>\n<\/p>\n<pre class=\"brush:java;\">\r\n       Criteria c = session.createCriteria(Student.class);\r\n       Projection p = Projections.property(&quot;name&quot;);\r\n       Criterion cr  = Restrictions.gt(&quot;studentId&quot;, 4);\r\n       c.setProjection(p);\r\n       c.add(cr);\r\n       List&lt;String&gt; list = c.list();\r\n       for(String s:list)\r\n       System.out.println(s);\r\n       session.close();<\/pre>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">extract all the student names and studentId where studentid greater than 4<\/span><\/span>\n<\/p>\n<pre class=\"brush:java;\">\r\n       \/* extract all the student names and studentId where studentid greater than 4*\/\r\n       Criteria c = session.createCriteria(Student.class);\r\n       Projection pName = Projections.property(&quot;name&quot;);\r\n       Projection pId = Projections.property(&quot;studentId&quot;);\r\n       Criterion cr  = Restrictions.gt(&quot;studentId&quot;, 4);\r\n       ProjectionList pl = Projections.projectionList();\r\n       pl.add(pName);\r\n       pl.add(pId);\r\n       c.setProjection(pl);\r\n       c.add(cr);\r\n       List&lt;Object&gt; list = c.list();\r\n       for(Object o:list){\r\n           Object[] arr = (Object[]) o;\r\n           System.out.println(arr[0]);\r\n           System.out.println(arr[1]);\r\n       }\r\n       session.close();\r\n<\/pre>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">Aggregate functions: get average of studentID<\/span><\/span>\n<\/p>\n<pre class=\"brush:java;\">\r\n       \/* Aggregate functions: get average of studentID *\/\r\n       Criteria c = session.createCriteria(Student.class);\r\n       Projection pAvg = Projections.avg(&quot;studentId&quot;);\r\n       c.setProjection(pAvg);\r\n       double d = ((Double)c.uniqueResult()).doubleValue();\r\n       System.out.println(d);\r\n       session.close();<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">&nbsp;&nbsp;<\/span><\/span>\r\n<\/pre>\n<hr \/>\n<p>\n\t<strong><span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">ORM Relations:<\/span><\/span><\/strong>\n<\/p>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\"><strong>1. Inheritance ( Is-a releation)<\/strong><br \/>\n\t&nbsp; &nbsp;&#8211; table-per-class&nbsp;<\/span><\/span>\n<\/p>\n<pre class=\"brush:xml;\">\r\n&lt;hibernate-mapping&gt;\r\n    &lt;class name=&quot;com.bellinfo.hib.inheritance.Payment&quot; table=&quot;PAYMENT&quot; schema=&quot;hibschema&quot; &gt;\r\n     &lt;id name=&quot;paymentId&quot;&gt;\r\n         &lt;generator class=&quot;increment&quot;\/&gt;\r\n             &lt;\/id&gt;\r\n        &lt;discriminator column=&quot;PAYMENT_TYPE&quot; type=&quot;string&quot;\/&gt;\r\n        &lt;property name=&quot;amount&quot; column=&quot;AMOUNT&quot;\/&gt;\r\n\r\n     &lt;subclass name=&quot;com.bellinfo.hib.inheritance.CreditCardPayment&quot; discriminator-value=&quot;CREDIT&quot;&gt;\r\n         &lt;property name=&quot;cardNumber&quot; column=&quot;CARD_NUMBER&quot;\/&gt;\r\n         &lt;property name=&quot;cvv&quot; column=&quot;CVV&quot;\/&gt;\r\n     &lt;\/subclass&gt;\r\n     &lt;subclass name=&quot;com.bellinfo.hib.inheritance.ChequePayment&quot; discriminator-value=&quot;CHEQUE&quot;&gt;\r\n         &lt;property name=&quot;chequeNo&quot; column=&quot;CHEQUE_NUMBER&quot;\/&gt;\r\n         &lt;property name=&quot;chequeBy&quot; column=&quot;CHEQUE_BY&quot;\/&gt;\r\n     &lt;\/subclass&gt;\r\n  &lt;\/class&gt;\r\n&lt;\/hibernate-mapping&gt;<\/pre>\n<p>\n\t<br \/>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">&nbsp; &nbsp;&#8211; table-per-subclass&nbsp;<\/span><\/span>\n<\/p>\n<pre class=\"brush:xml;\">\r\n&lt;hibernate-mapping&gt;\r\n    &lt;class name=&quot;com.bellinfo.hib.inheritance.Payment&quot; table=&quot;PAYMENT&quot; schema=&quot;hibschema&quot; &gt;\r\n     &lt;id name=&quot;paymentId&quot; column=&quot;PAYMENT_ID&quot;&gt;\r\n         &lt;generator class=&quot;increment&quot;\/&gt;\r\n             &lt;\/id&gt;\r\n        &lt;property name=&quot;amount&quot; column=&quot;AMOUNT&quot;\/&gt;\r\n     &lt;joined-subclass name=&quot;com.bellinfo.hib.inheritance.CreditCardPayment&quot; table=&quot;CREDIT_PAYMENT&quot;&gt;\r\n         &lt;key column=&quot;PAYMENT_ID&quot;\/&gt;\r\n         &lt;property name=&quot;cardNumber&quot; column=&quot;CARD_NUMBER&quot;\/&gt;\r\n         &lt;property name=&quot;cvv&quot; column=&quot;CVV&quot;\/&gt;\r\n     &lt;\/joined-subclass&gt;\r\n     &lt;joined-subclass name=&quot;com.bellinfo.hib.inheritance.ChequePayment&quot; table=&quot;CHEQUE_PAYMENT&quot;&gt;\r\n         &lt;key column=&quot;PAYMENT_ID&quot;\/&gt;\r\n         &lt;property name=&quot;chequeNo&quot; column=&quot;CHEQUE_NUMBER&quot;\/&gt;\r\n         &lt;property name=&quot;chequeBy&quot; column=&quot;CHEQUE_BY&quot;\/&gt;\r\n     &lt;\/joined-subclass&gt;\r\n  &lt;\/class&gt;\r\n&lt;\/hibernate-mapping&gt;<\/pre>\n<p>\n\t<br \/>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">&nbsp; &nbsp;&#8211; table-per-concrete class<\/span><\/span>\n<\/p>\n<pre class=\"brush:xml;\">\r\n&lt;hibernate-mapping&gt;\r\n    &lt;class name=&quot;com.bellinfo.hib.inheritance.Payment&quot; table=&quot;PAYMENT&quot; schema=&quot;hibschema&quot; &gt;\r\n        &lt;cache usage=&quot;read-write&quot;\/&gt;\r\n        &lt;id name=&quot;paymentId&quot; column=&quot;PAYMENT_ID&quot;&gt;\r\n         &lt;generator class=&quot;increment&quot;\/&gt;\r\n             &lt;\/id&gt;\r\n        &lt;property name=&quot;amount&quot; column=&quot;AMOUNT&quot;\/&gt;\r\n\r\n    &lt;union-subclass name=&quot;com.bellinfo.hib.inheritance.CreditCardPayment&quot; table=&quot;CREDIT_PAYMENT&quot;&gt;\r\n\r\n         &lt;property name=&quot;cardNumber&quot; column=&quot;CARD_NUMBER&quot;\/&gt;\r\n         &lt;property name=&quot;cvv&quot; column=&quot;CVV&quot;\/&gt;\r\n\r\n    &lt;\/union-subclass&gt;\r\n    &lt;union-subclass name=&quot;com.bellinfo.hib.inheritance.ChequePayment&quot; table=&quot;CHEQUE_PAYMENT&quot;&gt;\r\n        &lt;property name=&quot;chequeNo&quot; column=&quot;CHEQUE_NUMBER&quot;\/&gt;\r\n        &lt;property name=&quot;chequeBy&quot; column=&quot;CHEQUE_BY&quot;\/&gt;\r\n    &lt;\/union-subclass&gt;\r\n\r\n  &lt;\/class&gt;\r\n&lt;\/hibernate-mapping&gt;<\/pre>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\">Reference : <a href=\"https:\/\/docs.jboss.org\/hibernate\/orm\/3.5\/reference\/en\/html\/inheritance.html\">https:\/\/docs.jboss.org\/hibernate\/orm\/3.5\/reference\/en\/html\/inheritance.html<\/a><\/span><\/span>\n<\/p>\n<p>\n\t<br \/>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\"><strong>2. Assocaition ( Has-a )<\/strong><br \/>\n\t&nbsp; &nbsp;&#8211; one-to-many<\/span><\/span>\n<\/p>\n<pre class=\"brush:xml;\">\r\n&lt;hibernate-mapping&gt;\r\n    &lt;class name=&quot;com.bellinfo.hib.associations.onetomany.Product&quot; table=&quot;PRODUCT&quot; schema=&quot;hibschema&quot; &gt;\r\n\r\n      &lt;id name=&quot;productId&quot; column=&quot;PRODUCT_ID&quot; &gt;\r\n          &lt;generator class=&quot;increment&quot;&gt;\r\n          &lt;\/generator&gt;\r\n      &lt;\/id&gt;\r\n      &lt;property name=&quot;productName&quot; column=&quot;PRODUCT_NAME&quot;\/&gt;\r\n     <strong> &lt;set name=&quot;parts&quot; cascade=&quot;all&quot;&gt;<\/strong>\r\n          &lt;key column=&quot;PRODUCT_ID&quot; <strong>not-null=&quot;true&quot;<\/strong>&gt;&lt;\/key&gt;\r\n          &lt;one-to-many class=&quot;com.bellinfo.hib.associations.onetomany.Part&quot;\/&gt;\r\n      &lt;\/set&gt;\r\n\r\n    &lt;\/class&gt;\r\n&lt;\/hibernate-mapping&gt;<\/pre>\n<p>\n\t<br \/>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">&nbsp; &nbsp;&#8211; one-to-many<br \/>\n\t&nbsp; &nbsp;&#8211; many-to-many<br \/>\n\t&nbsp; &nbsp;&#8211; one-to-one<\/span><\/span>\n<\/p>\n<hr \/>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\"><strong>Pagination<\/strong> : using HQL and Criteria<\/span><\/span>\n<\/p>\n<p>\n\t<strong><span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">HQL&nbsp;<\/span><\/span><\/strong>\n<\/p>\n<pre class=\"brush:java;\">\r\n        String hql_retirve =&quot;from CreditCardPayment&quot;;\r\n        Query q =session.createQuery(hql_retirve);\r\n        int initial = 1;\r\n        int max =3;\r\n        int count =1;\r\n        HashMap&lt;Integer, List&lt;CreditCardPayment&gt;&gt; hmPagination = new HashMap&lt;&gt;();\r\n        System.out.println(q.list().size());\r\n        for(int i=0;i&lt;q.list().size();i++){\r\n            <strong>q.setFirstResult(initial);\r\n            q.setMaxResults(max);\r\n<\/strong>            List&lt;CreditCardPayment&gt; listcc = q.list();\r\n            hmPagination.put(count, listcc);\r\n            count++;\r\n            initial = max+1;\r\n            max = max +3;\r\n        }\r\n\r\n        for(Map.Entry&lt;Integer, List&lt;CreditCardPayment&gt;&gt; entry:hmPagination.entrySet()){\r\n            System.out.println(entry.getKey());\r\n            for(CreditCardPayment ccp:entry.getValue()){\r\n            System.out.println(ccp);\r\n            }\r\n\r\n        }\r\n<\/pre>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>Criteria : &nbsp; <\/strong>&nbsp; &nbsp; &nbsp;<\/span><\/span><br \/>\n\t&nbsp; &nbsp; &nbsp; &nbsp; criteria.setFirstResult(1);\n<\/p>\n<p>\n\t&nbsp; &nbsp; &nbsp; &nbsp;criteria.setMaxResults(5);\n<\/p>\n<hr \/>\n<p>\n\t<span style=\"font-size:16px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>Cache Support:<\/strong><br \/>\n\t&nbsp; &nbsp; &#8211; Reduce database calls<br \/>\n\t&nbsp; &nbsp; &#8211; Improve application performance<\/span><\/span><br \/>\n\t<strong><span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\">1. Session level &nbsp; &#8211; per user and its a default cache<\/span><\/span><\/strong>\n<\/p>\n<pre class=\"brush:php;\">\r\nSession ses1 = sf.openSession();\r\nStudent c1 = (Student)ses1.load(Student.class, 5);\r\n\/\/This one is coming from session\r\nc1 = (Student)ses1.load(Student.class, 5);\r\n<\/pre>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>2. SessionFactory level &nbsp;&#8211; per entire application<\/strong><br \/>\n\t&nbsp; &nbsp; a.Enable second-level cache<br \/>\n\t&nbsp; &nbsp; b.Configure cache factory class<br \/>\n\t&nbsp; &nbsp; c.Define ehcache<br \/>\n\t&nbsp; &nbsp; d.configure ehcache<br \/>\n\t&nbsp; &nbsp; e.configure cache usage in hbm file<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\">POM FILE<\/span><\/span>\n<\/p>\n<pre class=\"brush:xml;\">\r\n    &lt;dependencies&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;org.postgresql&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;postgresql&lt;\/artifactId&gt;\r\n            &lt;version&gt;9.3-1100-jdbc41&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;org.hibernate&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;hibernate-core&lt;\/artifactId&gt;\r\n            &lt;version&gt;4.3.2.Final&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;org.hibernate&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;hibernate-ehcache&lt;\/artifactId&gt;\r\n            &lt;version&gt;4.3.2.Final&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;net.sf.ehcache&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;ehcache&lt;\/artifactId&gt;\r\n            &lt;version&gt;2.10.1&lt;\/version&gt;\r\n            &lt;type&gt;pom&lt;\/type&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;net.sf.ehcache&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;ehcache-core&lt;\/artifactId&gt;\r\n            &lt;version&gt;2.6.9&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n        &lt;dependency&gt;\r\n            &lt;groupId&gt;org.slf4j&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;slf4j-simple&lt;\/artifactId&gt;\r\n            &lt;version&gt;1.7.5&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n\r\n    &lt;\/dependencies&gt;<\/pre>\n<p class=\"brush:xml;\">\n\tCFG FILE\n<\/p>\n<p>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n<\/p>\n<pre class=\"brush:xml;\">\r\n &lt;!-- enable second-level cache --&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name=&quot;hibernate.cache.use_second_level_cache&quot;&gt;true&lt;\/property&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name=&quot;hibernate.cache.use_query_cache&quot;&gt;true&lt;\/property&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name=&quot;hibernate.cache.region.factory_class&quot;&gt;org.hibernate.cache.ehcache.EhCacheRegionFactory&lt;\/property&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name=&quot;net.sf.ehcache.configurationResourceName&quot;&gt;ehcache.xml&lt;\/property&gt;<\/pre>\n<p>\n\tEHCACHE.XML\n<\/p>\n<pre class=\"brush:xml;\">\r\n&lt;?xml version=&#39;1.0&#39; encoding=&#39;UTF-8&#39;?&gt;\r\n&lt;ehcache xmlns:xsi=&#39;http:\/\/www.w3.org\/2001\/XMLSchema-instance&#39;\r\n         xsi:noNamespaceSchemaLocation=&#39;http:\/\/ehcache.org\/ehcache.xsd&#39;  updateCheck=&quot;true&quot;\r\n         monitoring=&quot;autodetect&quot; dynamicConfig=&quot;true&quot;&gt;\r\n\r\n    &lt;diskStore path=&quot;java.io.tmpdir\/ehcache&quot; \/&gt;\r\n\r\n    &lt;defaultCache maxEntriesLocalHeap=&quot;10000&quot; eternal=&quot;false&quot;\r\n                  timeToIdleSeconds=&quot;120&quot; timeToLiveSeconds=&quot;120&quot; diskSpoolBufferSizeMB=&quot;30&quot;\r\n                  maxEntriesLocalDisk=&quot;10000000&quot; diskExpiryThreadIntervalSeconds=&quot;120&quot;\r\n                  memoryStoreEvictionPolicy=&quot;LRU&quot; statistics=&quot;true&quot;&gt;\r\n        &lt;persistence strategy=&quot;localTempSwap&quot; \/&gt;\r\n    &lt;\/defaultCache&gt;\r\n\r\n\r\n    &lt;cache name=&quot;com.bellinfo.hib.inheritance.CreditCardPayment&quot; maxEntriesLocalHeap=&quot;10000&quot; eternal=&quot;false&quot;\r\n           timeToIdleSeconds=&quot;60&quot; timeToLiveSeconds=&quot;60&quot;&gt;\r\n        &lt;persistence strategy=&quot;localTempSwap&quot; \/&gt;\r\n    &lt;\/cache&gt;\r\n\r\n     &lt;cache name=&quot;org.hibernate.cache.internal.StandardQueryCache&quot;\r\n            maxEntriesLocalHeap=&quot;5&quot; eternal=&quot;false&quot; timeToLiveSeconds=&quot;120&quot;&gt;\r\n         &lt;persistence strategy=&quot;localTempSwap&quot; \/&gt;\r\n     &lt;\/cache&gt;\r\n\r\n     &lt;cache name=&quot;org.hibernate.cache.spi.UpdateTimestampsCache&quot;\r\n            maxEntriesLocalHeap=&quot;5000&quot; eternal=&quot;true&quot;&gt;\r\n         &lt;persistence strategy=&quot;localTempSwap&quot; \/&gt;\r\n     &lt;\/cache&gt;\r\n&lt;\/ehcache&gt;<\/pre>\n<p>\n\tHBM FILE&nbsp;\n<\/p>\n<pre class=\"brush:xml;\">\r\n&lt;hibernate-mapping&gt;\r\n    &lt;class name=&quot;com.bellinfo.hibernate.Student&quot; table=&quot;STUDENT&quot; schema=&quot;hibschema&quot; &gt;\r\n       &lt;cache usage=&quot;read-only&quot;\/&gt;\r\n      &lt;id name=&quot;studentId&quot; &gt;\r\n          &lt;generator class=&quot;native&quot;&gt;\r\n          &lt;\/generator&gt;\r\n      &lt;\/id&gt;\r\n      &lt;property name=&quot;name&quot;\/&gt;\r\n      &lt;property name=&quot;createdDate&quot;\/&gt;\r\n\r\n    &lt;\/class&gt;\r\n&lt;\/hibernate-mapping&gt;<\/pre>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\">3. Query Cache &#8211;&nbsp;<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\">References &nbsp;:&nbsp;<a href=\"https:\/\/docs.jboss.org\/hibernate\/orm\/3.6\/reference\/en-US\/html\/collections.html\">https:\/\/docs.jboss.org\/hibernate\/orm\/3.6\/reference\/en-US\/html\/collections.html<\/a><\/span><\/span>\n<\/p>\n<p>\n\t&nbsp;\n<\/p>\n<p>\n\tAnnnotation Based Configuration:\n<\/p>\n<p>\n\tTABLE-PER-SUBCLASS (JOINED)\n<\/p>\n<pre class=\"brush:java;\">\r\n@Entity\r\n@Table(name = &quot;Payment&quot;)\r\n@Inheritance(strategy=InheritanceType.JOINED)\r\npublic class Payment {\r\n\r\n    @Id\r\n    @GeneratedValue(strategy=GenerationType.IDENTITY)\r\n    @Column(name = &quot;id&quot;)\r\n    protected int id;\r\n\r\n    @Column(name=&quot;amount&quot;)\r\n    protected String amount;\r\n\r\n    public Payment(String amount) {\r\n        this.amount = amount;\r\n    }\r\n\r\n}<\/pre>\n<p>\n\t&nbsp;\n<\/p>\n<pre class=\"brush:java;\">\r\n@Entity\r\n@Table(name=&quot;credit_card&quot;)\r\npublic class CreditCardPayment extends Payment{\r\n\r\n    @Column\r\n    private String ccNumber;\r\n\r\n    @Column\r\n    private String cccvv;\r\n\r\n    public CreditCardPayment(String amount, String ccNumber, String cccvv) {\r\n        super(amount);\r\n        this.ccNumber = ccNumber;\r\n        this.cccvv = cccvv;\r\n    }\r\n\r\n}\r\n<\/pre>\n<pre class=\"brush:java;\">\r\n@Entity\r\n@Table(name=&quot;check_pay&quot;)\r\npublic class ChequePayment extends Payment {\r\n\r\n    @Column(name=&quot;chequeNo&quot;)\r\n    private String chequeNo;\r\n\r\n    @Column(name=&quot;chequeBy&quot;)\r\n    private String chequeBy;\r\n\r\n\r\n    public ChequePayment(String amount, String chequeNo, String chequeBy) {\r\n        super(amount);\r\n        this.chequeNo = chequeNo;\r\n        this.chequeBy = chequeBy;\r\n    }\r\n\r\n}<\/pre>\n<p>\n\t&nbsp;\n<\/p>\n<p>\n\tONE TABLE\n<\/p>\n<pre class=\"brush:java;\">\r\n@Entity\r\n@Inheritance(strategy = InheritanceType.SINGLE_TABLE)\r\n@DiscriminatorColumn(\r\n        name=&quot;personType&quot;,\r\n        discriminatorType=DiscriminatorType.STRING\r\n)\r\n@DiscriminatorValue(&quot;Person&quot;)\r\n@Table(name=&quot;person&quot;)\r\npublic class Person implements Serializable {\r\n\r\n}<\/pre>\n<p>\n\t&nbsp;\n<\/p>\n<pre class=\"brush:php;\">\r\n@Entity\r\n@Table(name=&quot;student&quot;)\r\n@DiscriminatorValue(&quot;Student&quot;)\r\npublic class Student extends Person implements Serializable {\r\n    private static final long serialVersionUID = 1L;\r\n    @Column(name=&quot;class_name&quot;)\r\n    private String className;\r\n\r\n}<\/pre>\n<p>\n\t&nbsp;\n<\/p>\n<p>\n\tTABLE-PER-CLASS\n<\/p>\n<pre class=\"brush:java;\">\r\n@Entity\r\n@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)\r\n@Table(name=&quot;person&quot;)\r\npublic class Person implements Serializable {\r\n private static final long serialVersionUID = 1L;\r\n\r\n}<\/pre>\n<p>\n\t&nbsp;\n<\/p>\n<pre class=\"brush:java;\">\r\n@Entity\r\npublic class Student extends Person implements Serializable {\r\n\tprivate static final long serialVersionUID = 1L;\r\n\t@Column(name=&quot;class_name&quot;)\r\n\tprivate String className;\r\n\r\n}<\/pre>\n<p>\n\t&nbsp;\n<\/p>\n<p>\n\tASSOCIATIONS\n<\/p>\n<p>\n\tONE-TO-MANY\n<\/p>\n<pre class=\"brush:java;\">\r\npackage com.bellinfo.advanced.hibernate.entity;\r\n\r\nimport javax.persistence.*;\r\nimport java.util.Set;\r\n\r\n@Entity\r\npublic class Cart {\r\n\r\n    @Id\r\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\r\n    @Column(name=&quot;cart_id&quot;)\r\n    int id;\r\n\r\n    @Column\r\n    String name;\r\n\r\n    @OneToMany\r\n    Set&lt;Items&gt; items;\r\n\r\n    public Set&lt;Items&gt; getItems() {\r\n        return items;\r\n    }\r\n\r\n    public void setItems(Set&lt;Items&gt; items) {\r\n        this.items = items;\r\n    }\r\n\r\n    public Cart() {\r\n    }\r\n\r\n    public Cart(String name) {\r\n        this.name = name;\r\n    }\r\n\r\n    public int getId() {\r\n        return id;\r\n    }\r\n\r\n    public void setId(int id) {\r\n        this.id = id;\r\n    }\r\n\r\n    public String getName() {\r\n        return name;\r\n    }\r\n\r\n    public void setName(String name) {\r\n        this.name = name;\r\n    }\r\n\r\n    @Override\r\n    public String toString() {\r\n        return &quot;Cart{&quot; +\r\n                &quot;id=&quot; + id +\r\n                &quot;, name=&#39;&quot; + name + &#39;\\&#39;&#39; +\r\n                &#39;}&#39;;\r\n    }\r\n}\r\n<\/pre>\n<p>\n\t&nbsp;\n<\/p>\n<pre class=\"brush:java;\">\r\npackage com.bellinfo.advanced.hibernate.entity;\r\n\r\nimport javax.persistence.*;\r\n\r\n@Entity\r\npublic class Items {\r\n\r\n    @Id\r\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\r\n    int id;\r\n\r\n    @Column\r\n    String itemId;\r\n\r\n    @Column\r\n    double cost;\r\n\r\n    @ManyToOne\r\n    @JoinColumn(name=&quot;cart_id&quot;, nullable = false)\r\n    Cart cart1;\r\n\r\n    public Items() {\r\n    }\r\n\r\n    public Items(String itemId, double cost, Cart cart1) {\r\n        this.itemId = itemId;\r\n        this.cost = cost;\r\n        this.cart1 = cart1;\r\n    }\r\n\r\n    public int getId() {\r\n        return id;\r\n    }\r\n\r\n    public void setId(int id) {\r\n        this.id = id;\r\n    }\r\n\r\n    public String getItemId() {\r\n        return itemId;\r\n    }\r\n\r\n    public void setItemId(String itemId) {\r\n        this.itemId = itemId;\r\n    }\r\n\r\n    public double getCost() {\r\n        return cost;\r\n    }\r\n\r\n    public void setCost(double cost) {\r\n        this.cost = cost;\r\n    }\r\n\r\n    public Cart getCart1() {\r\n        return cart1;\r\n    }\r\n\r\n    public void setCart1(Cart cart1) {\r\n        this.cart1 = cart1;\r\n    }\r\n\r\n    @Override\r\n    public String toString() {\r\n        return &quot;Items{&quot; +\r\n                &quot;id=&quot; + id +\r\n                &quot;, itemId=&#39;&quot; + itemId + &#39;\\&#39;&#39; +\r\n                &quot;, cost=&quot; + cost +\r\n                &quot;, cart1=&quot; + cart1 +\r\n                &#39;}&#39;;\r\n    }\r\n}\r\n\r\nDemo:<\/pre>\n<pre class=\"brush:java;\">\r\npackage com.bellinfo.advanced.hibernate.inheritance;\r\n\r\nimport com.bellinfo.advanced.hibernate.entity.Bike;\r\nimport com.bellinfo.advanced.hibernate.entity.Cart;\r\nimport com.bellinfo.advanced.hibernate.entity.Items;\r\nimport com.bellinfo.advanced.hibernate.entity.Vehicle;\r\nimport com.bellinfo.advanced.hibernate.util.HibernateUtil;\r\nimport org.hibernate.HibernateException;\r\nimport org.hibernate.Session;\r\nimport org.hibernate.SessionFactory;\r\nimport org.hibernate.Transaction;\r\n\r\nimport java.util.HashSet;\r\nimport java.util.Set;\r\n\r\npublic class OneToMany {\r\n\r\n    public static void main(String[] args) {\r\n        SessionFactory sf = null;\r\n        Session s = null;\r\n        Transaction tx = null;\r\n        try {\r\n            sf = HibernateUtil.newSessionFactory();\r\n            s = sf.openSession();\r\n            tx = s.beginTransaction();\r\n\r\n            Cart cart = new Cart(&quot;fruits&quot;);\r\n\r\n            Items item1 = new Items(&quot;1&quot;,200,cart);\r\n            Items item2 = new Items(&quot;2&quot;,400,cart);\r\n            Set&lt;Items&gt; itemsSet = new HashSet&lt;Items&gt;();\r\n            itemsSet.add(item1);\r\n            itemsSet.add(item2);\r\n            cart.setItems(itemsSet);\r\n\r\n            s.save(cart);\r\n            s.save(item1);\r\n            s.save(item2);\r\n\r\n            tx.commit();\r\n        } catch (HibernateException e) {\r\n            e.printStackTrace();\r\n        } finally {\r\n            s.close();\r\n            sf.close();\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<p>\n\t&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>DOCS : https:\/\/docs.jboss.org\/hibernate\/orm\/5.2\/userguide\/html_single\/Hibernate_User_Guide.html POSTGRES: https:\/\/mvnrepository.com\/artifact\/org.postgresql\/postgresql HIBERNATE REPOS: https:\/\/mvnrepository.com\/artifact\/org.hibernate If you encounter any compatabile issues. pick the right version of postgres..&nbsp; &nbsp; &lt;dependency&gt; &lt;groupId&gt;org.postgresql&lt;\/groupId&gt; &lt;artifactId&gt;postgresql&lt;\/artifactId&gt; &lt;version&gt;42.2.1&lt;\/version&gt; &lt;\/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.hibernate&lt;\/groupId&gt; &lt;artifactId&gt;hibernate-core&lt;\/artifactId&gt; &lt;version&gt;5.2.2.Final&lt;\/version&gt; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[9,2],"tags":[],"class_list":["post-197","post","type-post","status-publish","format-standard","hentry","category-advance","category-technology"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p70lnf-3b","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/kaizen-koka.com\/index.php?rest_route=\/wp\/v2\/posts\/197","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kaizen-koka.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kaizen-koka.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kaizen-koka.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kaizen-koka.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=197"}],"version-history":[{"count":19,"href":"https:\/\/kaizen-koka.com\/index.php?rest_route=\/wp\/v2\/posts\/197\/revisions"}],"predecessor-version":[{"id":565,"href":"https:\/\/kaizen-koka.com\/index.php?rest_route=\/wp\/v2\/posts\/197\/revisions\/565"}],"wp:attachment":[{"href":"https:\/\/kaizen-koka.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=197"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kaizen-koka.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=197"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kaizen-koka.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=197"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}