Hibernate hbm2ddl property

By | July 20, 2018

In our previous post Why to use hibernate dialect? we understood all the concept related to hibernate dialect property

In this post we will talk about hibernate hbm2ddl property in detail using an example.

Hibernate hbm2ddl property you can configure in your hibernate.cfg.xml as below

The possible values for hibernate.hbm2ddl.auto are:

  • create
  • validate
  • update
  • create-drop


If the value is CREATE then hibernate first drops the existing database  table/tables, then creates a new table/tables and then executes operations on newly created table.

The only problem with the value “create” is, we loose existing table data.

Let’s modify hibernate.cfg.xml for hibernate.hbm2ddl.auto property as below

Now login to your MYSQL database console and connect with database schema(test)

After Running ClientTest.java with createEmployee(employeeService) (Demo project) method.

Output of Eclipse console and MySqlWorkbench are as below in this case



If the value is validate then hibernate only validates whether the table and columns are exist or not. If the table doesn’t exist then hibernate throws an exception.


If the value is update then, Hibernate checks for the table and columns. If table doesn’t exist then it creates a new table and if a column doesn’t exist it creates new column for it.

But in the case of value “update” hibernate doesn’t drop any existing table, here we doesn’t lose existing table or data.


If the value is create-drop then, Hibernate first checks for a table and do the necessary operations and finally drops the table after all the operations are completed.

The value “create-drop” is given for unit testing/POC kind of functionalities  in the hibernate.

Now let’s have a practical  example to understand how  hibernate hbm2ddl property works with different options(create,validate,update,create-drop)

To proceed with this demo we will refer our Hibernate CRUD(Create,Read,Update and Delete) example


Leave a Reply

Your email address will not be published. Required fields are marked *