What are the possible values of the Hibernate hbm2ddl.auto configuration and what do they do?

 

The hibernate.hbm2ddl.auto configuration property in Hibernate determines how Hibernate should handle the database schema generation and management. It controls the automatic generation of database tables based on your entity mappings. The possible values for hibernate.hbm2ddl.auto are:

  1. validate (Default): Hibernate only validates whether your current database schema matches the mapping metadata. It won't make any changes to the database schema.

    xml
  • <property name="hibernate.hbm2ddl.auto">validate</property>
  • update: Hibernate updates the database schema to match the entity mappings. It adds or alters database tables and columns based on changes in your entity classes. Existing data in the database is preserved, but it may not handle more complex changes like table drops or renaming.

    xml
  • <property name="hibernate.hbm2ddl.auto">update</property>
  • create: Hibernate drops and re-creates the database schema on startup. This means it will create tables, columns, and constraints based on your entity mappings. It's useful for development and testing but should be used with caution in production as it can result in data loss.

    xml
  • <property name="hibernate.hbm2ddl.auto">create</property>
  • create-drop: Similar to "create," Hibernate drops and re-creates the database schema on startup. However, it also drops the schema when the SessionFactory is closed. It's primarily used for testing and should not be used in production.

    xml
  • <property name="hibernate.hbm2ddl.auto">create-drop</property>
  • none: Hibernate does not perform any automatic database schema generation or management. You are responsible for creating and maintaining the database schema manually.

    xml
  • <property name="hibernate.hbm2ddl.auto">none</property>
  • create-only: Hibernate creates the database schema on startup, but it does not perform any updates or validations afterward. This is useful when you want to initialize the database schema for a new application but prevent any unintentional changes to it.

    xml
    1. <property name="hibernate.hbm2ddl.auto">create-only</property>

    It's important to choose the appropriate value for hibernate.hbm2ddl.auto based on your development, testing, and production needs. For production environments, using validate or none is generally recommended to avoid accidental schema changes or data loss. During development and testing, you might use update or create-drop to simplify the database setup.

    Here's an example of configuring hibernate.hbm2ddl.auto in a Hibernate configuration file (hibernate.cfg.xml):

    xml
    <hibernate-configuration> <session-factory> <!-- ...other configurations... --> <property name="hibernate.hbm2ddl.auto">update</property> </session-factory> </hibernate-configuration>

    In this example, Hibernate will automatically update the database schema based on the entity mappings when the application starts.

    Comments