
Quick Contact
Java Tutorial
- What is Java?
- History of Java
- Hello Java Program
- Features of Java
- Basic Syntax
- Java Setup
- Data Types in Java
- Java Variables
- Operators in Java
- JVM
- Java If-else Statement
- Switch Case Statement
- Java Loops
- Do-While Loop
- Java While Loop
- Continue Statement
- Break Statement in Java
- Constructors in Java
- Oops Concept in Java
- Features of OOPs
- Inheritance
- Exeception handeling
- Aggregation (HAS-A relationship) in Java
- Method Overriding in Java
- Method Overloading
- Java Static Keyword
- Java This Keyword
- Java Final Keyword
- Polymorphism
- Static Binding and Dynamic Binding
- Abstract class in Java
- Access Modifiers in Java
- Difference between abstract class and interface
- Interface in Java
- Garbage Collection in Java
- Java Package
- Encapsulation
- Serialization and Deserialization in Java
- Java Inner Classes
- Java Applets
- Multithreading in Java
- Thread Priorities in Java
- Thread Creation
- Inter Thread Communication
- Wrapper Classes in Java
- Java Input Output
- Java AWT Introduction
- Java Layout Manager
- Java Layout Policy
- Java AWT Events
- Collection Framework
- Collection Framework List Interface
- Swing in Java
- Swing Utility Classes
- Swing Layout Managers
- Java JDBC
- Hibernate Framework Overview – Architecture and Basics
Springboot
- Spring Environment Setup
- Spring Boot CRUD REST API Project using IntelliJ IDEA | Postman | MySQL
- Dockerizing Spring Boot Application | Spring Boot Docker Tutorial
- spring-boot-restapidocumentation with swagger
- Spring Boot HttpClient Overview
- Apache HttpClient POST HTTP Request Example
- Apache HttpClient PUT HTTP Request Example
- Apache HttpClient DELETE HTTP Request Example
- Apache HttpClient HTML Form POST Request Example
- Spring Boot JSP Exampl
- Deploying Spring Boot WAR file with JSP to Tomcat
- Spring Boot Annotations
- Spring Core Annotations
- Spring MVC Annotations with Examples
- Spring Scheduling Annotations
- Spring - Java-based Container Configuration
- Spring Java Based Configuration Example
Hibernate
- Hibernate 5 hello world
- Hibernate- One to One Unidirectional Mapping Annotation Example
- Hibernate - Batch Processing
- Hibernate - Interceptors
- Hibernate 5 - Create, Read, Update and Delete (CRUD) Operations Example
- Hibernate Transaction Management
- Hibernate One to Many Unidirectional Mapping Example
- Hibernate One to Many Bidirectional Mapping Example
- Hibernate Many to Many Annotation Mapping Example
- Hibernate Primary KeyJoin Column
- Hibernate First Level Cache with Example
- Hibernate XML Configuration Example with Maven + Eclipse + MySQL Database
- Hibernate Java Configuration Example
- JPA 2 with Hibernate 5 Bootstrapping Example
- JPA and Hibernate Cascade Types
- Hibernate/JPA - Primary Key Generation
- Hibernate 5 - Enum Type Mapping Example
- Hibernate Component Mapping
- Hibernate Object States – Transient,Persistent and Detached
- Hibernate 5 - Save an Entity Example
- Hibernate 5 - Persist an Entity Example
- Hibernate 5 - saveOrUpdate() Method Example
- Hibernate 5 - get(), load() and byId() Method Examples
- Hibernate 5 - merge() Example
- Hibernate 5 - Delete or Remove an Entity Example
- Hibernate 5 - load() Method Example
- Hibernate Session Interface Methods
- Hibernate Session.clear() Method Example
- Introduction Of Java strutes to Architecture
- Struts 2 - Architecture
- Struts 2 - Configuration Files
- Struts 2 - Actions
- Struts 2 - Interceptors
- Struts 2 - Results & Result Types
- Struts 2 - Value Stack/OGNL
- Struts 2 - File Uploading
- Struts 2 - Database Access
- Struts 2 - Validations Framework
JAVA FX
- JavaFX Tutorial
- Introduction to JavaFX Pane
- JavaFX Popup
- JavaFX group
- JavaFX Controller
- JavaFX Gradient Color
- JavaFXAnchorPane
- JavaFXTabPane
- JavaFX Scene
- JavaFX Stage
- JavaFXWebView
- JavaFX Timeline
- JavaFX Timer
- JavaFX Image
- JavaFX Background
- JavaFX dialog
- JavaFX Font
- JavaFXTextArea
- JavaFXObservableList
- JavaFX GUI
- JavaFX FXML
- JavaFXEventHandler
- JavaFXGradle
- JavafxScrollpane
- JavaFXAPI
Hibernate – Interceptors
As you have learnt that in Hibernate, an object will be created and persisted. Once the object has been changed, it must be saved back to the database. This process continues until the next time the object is needed, and it will be loaded from the persistent store.
Thus an object passes through different stages in its life cycle and Interceptor Interface provides methods, which can be called at different stages to perform some required tasks. These methods are callbacks from the session to the application, allowing the application to inspect and/or manipulate properties of a persistent object before it is saved, updated, deleted or loaded. Following is the list of all the methods available within the Interceptor interface −
Sr.No. | Method & Description |
---|---|
1 |
findDirty()This method is be called when the flush() method is called on a Session object. |
2 |
instantiate()This method is called when a persisted class is instantiated. |
3 |
isUnsaved()This method is called when an object is passed to the saveOrUpdate() method/ |
4 |
onDelete()This method is called before an object is deleted. |
5 |
onFlushDirty()This method is called when Hibernate detects that an object is dirty (i.e. have been changed) during a flush i.e. update operation. |
6 |
onLoad()This method is called before an object is initialized. |
7 |
onSave()This method is called before an object is saved. |
8 |
postFlush()This method is called after a flush has occurred and an object has been updated in memory. |
9 |
preFlush()This method is called before a flush. |
Hibernate Interceptor gives us total control over how an object will look to both the application and the database.
How to Use Interceptors?
To build an interceptor, you can either implement Interceptor class directly or extend EmptyInterceptor class. Following will be the simple steps to use Hibernate Interceptor functionality.
Create Interceptors
We will extend EmptyInterceptor in our example where Interceptor’s method will be called automatically when Employee object is created and updated. You can implement more methods as per your requirements.
importjava.io.Serializable; importjava.util.Date; importjava.util.Iterator; importorg.hibernate.EmptyInterceptor; importorg.hibernate.Transaction; importorg.hibernate.type.Type; publicclassMyInterceptorextendsEmptyInterceptor{ privateint updates; privateint creates; privateint loads; publicvoidonDelete(Object entity,Serializable id, Object[] state,String[]propertyNames,Type[] types){ // do nothing } // This method is called when Employee object gets updated. publicbooleanonFlushDirty(Object entity,Serializable id, Object[]currentState,Object[]previousState,String[]propertyNames, Type[] types){ if( entity instanceofEmployee){ System.out.println("Update Operation"); returntrue; } returnfalse; } publicbooleanonLoad(Object entity,Serializable id, Object[] state,String[]propertyNames,Type[] types){ // do nothing returntrue; } // This method is called when Employee object gets created. publicbooleanonSave(Object entity,Serializable id, Object[] state,String[]propertyNames,Type[] types){ if( entity instanceofEmployee){ System.out.println("Create Operation"); returntrue; } returnfalse; } //called before commit into database publicvoidpreFlush(Iterator iterator){ System.out.println("preFlush"); } //called after committed into database publicvoidpostFlush(Iterator iterator){ System.out.println("postFlush"); } }
Create POJO Classes
Now, let us modify a little bit our first example where we used EMPLOYEE table and Employee class to play with −
publicclassEmployee{ privateint id; privateStringfirstName; privateStringlastName; privateint salary; publicEmployee(){} publicEmployee(Stringfname,Stringlname,int salary){ this.firstName=fname; this.lastName=lname; this.salary= salary; } publicintgetId(){ return id; } publicvoidsetId(int id ){ this.id = id; } publicStringgetFirstName(){ returnfirstName; } publicvoidsetFirstName(Stringfirst_name){ this.firstName=first_name; } publicStringgetLastName(){ returnlastName; } publicvoidsetLastName(Stringlast_name){ this.lastName=last_name; } publicintgetSalary(){ return salary; } publicvoidsetSalary(int salary ){ this.salary= salary; } }
Create Database Tables
Second step would be creating tables in your database. There would be one table corresponding to each object, you are willing to provide persistence. Consider the objects explained above, need to be stored and retrieved into the following RDBMS table −
create table EMPLOYEE ( id INT NOT NULL auto_increment, first_name VARCHAR(20)default NULL, last_name VARCHAR(20)default NULL, salary INT default NULL, PRIMARY KEY (id) );
Create Mapping Configuration File
This step is to create a mapping file that instructs Hibernate — how to map the defined class or classes to the database tables.
< ?xml version ="1.0" encoding ="utf-8"?> < !DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> < hibernate-mapping> < classname="Employee"table="EMPLOYEE"> < metaattribute="class-description"> This class contains the employee detail. < /meta> < idname="id"type="int"column="id"> < generatorclass="native"/> < /id> < propertyname="firstName"column="first_name"type="string"/> < propertyname="lastName"column="last_name"type="string"/> < propertyname="salary"column="salary"type="int"/> < /class> < /hibernate-mapping>
Create Application Class
Finally, we will create our application class with the main() method to run the application. Here, it should be noted that while creating session object, we used our Interceptor class as an argument.
importjava.util.List; importjava.util.Date; importjava.util.Iterator; importorg.hibernate.HibernateException; importorg.hibernate.Session; importorg.hibernate.Transaction; importorg.hibernate.SessionFactory; importorg.hibernate.cfg.Configuration; publicclassManageEmployee{ privatestaticSessionFactory factory; publicstaticvoid main(String[]args){ try{ factory=newConfiguration().configure().buildSessionFactory(); }catch(Throwable ex){ System.err.println("Failed to create sessionFactory object."+ex); thrownewExceptionInInitializerError(ex); } ManageEmployee ME =newManageEmployee(); /* Add few employee records in database */ Integer empID1 =ME.addEmployee("Zara","Ali",1000); Integer empID2 =ME.addEmployee("Daisy","Das",5000); Integer empID3 =ME.addEmployee("John","Paul",10000); /* List down all the employees */ ME.listEmployees(); /* Update employee's records */ ME.updateEmployee(empID1,5000); /* Delete an employee from the database */ ME.deleteEmployee(empID2); /* List down new list of the employees */ ME.listEmployees(); } /* Method to CREATE an employee in the database */ publicIntegeraddEmployee(Stringfname,Stringlname,int salary){ Sessionsession=factory.openSession(newMyInterceptor()); Transactiontx=null; IntegeremployeeID=null; try{ tx=session.beginTransaction(); Employeeemployee=newEmployee(fname,lname, salary); employeeID=(Integer)session.save(employee); tx.commit(); }catch(HibernateException e){ if(tx!=null)tx.rollback(); e.printStackTrace(); }finally{ session.close(); } returnemployeeID; } /* Method to READ all the employees */ publicvoidlistEmployees(){ Sessionsession=factory.openSession(newMyInterceptor()); Transactiontx=null; try{ tx=session.beginTransaction(); List employees =session.createQuery("FROM Employee").list(); for(Iteratoriterator=employees.iterator();iterator.hasNext();){ Employeeemployee=(Employee)iterator.next(); System.out.print("First Name: "+employee.getFirstName()); System.out.print(" Last Name: "+employee.getLastName()); System.out.println(" Salary: "+employee.getSalary()); } tx.commit(); }catch(HibernateException e){ if(tx!=null)tx.rollback(); e.printStackTrace(); }finally{ session.close(); } } /* Method to UPDATE salary for an employee */ publicvoidupdateEmployee(IntegerEmployeeID,int salary ){ Sessionsession=factory.openSession(newMyInterceptor()); Transactiontx=null; try{ tx=session.beginTransaction(); Employeeemployee=(Employee)session.get(Employee.class,EmployeeID); employee.setSalary( salary ); session.update(employee); tx.commit(); }catch(HibernateException e){ if(tx!=null)tx.rollback(); e.printStackTrace(); }finally{ session.close(); } } /* Method to DELETE an employee from the records */ publicvoiddeleteEmployee(IntegerEmployeeID){ Sessionsession=factory.openSession(newMyInterceptor()); Transactiontx=null; try{ tx=session.beginTransaction(); Employeeemployee=(Employee)session.get(Employee.class,EmployeeID); session.delete(employee); tx.commit(); }catch(HibernateException e){ if(tx!=null)tx.rollback(); e.printStackTrace(); }finally{ session.close(); } } }
Compilation and Execution
Here are the steps to compile and run the above mentioned application. Make sure, you have set PATH and CLASSPATH appropriately before proceeding for the compilation and execution.
- Create hibernate.cfg.xml configuration file as explained in configuration chapter.
- Create Employee.hbm.xml mapping file as shown above.
- Create Employee.java source file as shown above and compile it.
- Create MyInterceptor.java source file as shown above and compile it.
- Create ManageEmployee.java source file as shown above and compile it.
- Execute ManageEmployee binary to run the program.