Removing an object from the database

Now, we take a look at how to remove a record from the database.

How to do it…

Here, we are trying to remove an employee object having id equals 1.

The SQL query executed to achieve the same result is as follows:

DELETE FROM employee WHERE id=1;

Now, let's take a look at how to do the same using hibernate.

Code

Enter the following code to delete an object of the employee type, where id is 1:

SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();

session.getTransaction().begin();
Employee employee = (Employee) session.get(Employee.class, new Long(1));
session.delete(employee);
session.getTransaction().commit();

session.close(); 
HibernateUtil.shutdown();

Output

The output will be as follows:

Hibernate: select employee0_.id as id0_1_, employee0_.department as department0_1_, employee0_.firstName as firstName0_1_, employee0_.salary as salary0_1_, department1_.id as id1_0_, department1_.deptName as deptName1_0_ from employee employee0_ left outer join department department1_ on employee0_.department=department1_.id where employee0_.id=?
Hibernate: delete from employee where id=?

How it works…

Here, the first query is executed to get the record from the database for Employee#1, and the second query is used to delete Employee#1.

The delete(Object object) method is void, so it returns nothing. This method throws an error if the record does not exist in the database for the given identifier.

If the record does not exist in the database, you will face the Exception in thread "main" java.lang.IllegalArgumentException: attempt to create delete event with null entity exception because get() returns the null object while you try to delete that object.

However, if you use the following code to delete the record, you will face another type of error:

Employee employee = new Employee();
employee.setId(1);
session.delete(employee);

When the preceding code is executed, you will face the Exception in thread "main" org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1" exception. This is because we are trying to delete Employee#1 from the database (which does not exist), and the employee object is also not null; so, it throws an error.

There are many cases where you may face an exception; for example, when you try to remove a parent object that is referred to by the child object. In such cases, you will get a foreign key constraint violated exception.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.14.142.194