Backend
6/11/2026
4 min read

Mastering spring.jpa.hibernate.ddl-auto in Spring Boot: Complete Guide with Real-World Examples

Mastering spring.jpa.hibernate.ddl-auto in Spring Boot: Complete Guide with Real-World Examples

Managing database schema changes is one of the most important responsibilities in any Spring Boot application. Whether you are building a small side project, a SaaS product, or a large enterprise system, understanding how Hibernate interacts with your database is critical.

One configuration property that every Java developer should know is:

spring.jpa.hibernate.ddl-auto

This property controls how Hibernate manages the database schema during application startup.

A wrong configuration can accidentally delete production data, while the correct configuration can improve developer productivity and deployment reliability.

In this guide, we will explore every available value, when to use it, when to avoid it, and real-world examples from production systems.

What is spring.jpa.hibernate.ddl-auto?

Hibernate is an ORM (Object Relational Mapping) framework that maps Java entities to database tables.

When the application starts, Hibernate compares your entity classes with the existing database schema.

The ddl-auto property tells Hibernate what action to perform based on that comparison.

Example:

spring.jpa.hibernate.ddl-auto=update

Depending on the value, Hibernate can:

  • Create tables

  • Update tables

  • Validate tables

  • Drop tables

  • Ignore schema management completely

Available Values

None

spring.jpa.hibernate.ddl-auto=none

Description:

Hibernate does not perform any schema management operations.

What Happens?

  • No table creation

  • No table updates

  • No schema validation

  • No schema modification

Best For:

  • Production systems

  • Enterprise applications

  • Flyway migrations

  • Liquibase migrations

Advantages:

  • Safe

  • Predictable

  • No accidental schema changes

Disadvantages:

  • Developers must manage the schema manually

Example:

A banking application manages schema changes using Flyway migration scripts. Hibernate should not modify the schema.

spring.jpa.hibernate.ddl-auto=none

Validate

spring.jpa.hibernate.ddl-auto=validate

Description:

Hibernate validates that database tables match entity definitions.

What Happens?

  • Checks the table existence

  • Checks column existence

  • Checks data types

  • Throws an exception if a mismatch exists

Best For:

  • Production

  • Staging

  • CI/CD validation

Advantages:

  • Detects schema issues early

  • Prevents runtime failures

Disadvantages:

  • Does not create or modify tables

Example:

@Entity
public class User {

```
@Id
private Long id;

private String name;
```

}

If the database does not contain the "name" column, the application startup will fail immediately.

This prevents deployment of incompatible code.

Update

spring.jpa.hibernate.ddl-auto=update

Description:

Hibernate updates the schema based on entity changes.

What Happens?

  • Creates missing tables

  • Creates missing columns

  • Updates schema where possible

  • Keeps existing data

Best For:

  • Local development

  • Learning projects

  • Internal tools

Advantages:

  • Fast development

  • Less manual database work

Disadvantages:

  • Can create unexpected schema changes

  • Not suitable for production

  • Cannot handle complex migrations properly

Example:

Before

@Entity
public class User {

```
@Id
private Long id;

private String name;
```

}

After

@Entity
public class User {

```
@Id
private Long id;

private String name;

private String phoneNumber;
```

}

Hibernate automatically adds:

ALTER TABLE users ADD phone_number VARCHAR(255);

without deleting existing data.

create

spring.jpa.hibernate.ddl-auto=create

Description:

Hibernate drops all existing tables and recreates them.

What Happens?

  • Existing tables removed

  • New tables created

  • All data lost

Best For:

  • Learning

  • Demo projects

  • Quick prototypes

Advantages:

  • Fresh schema for every startup

  • Useful during rapid experimentation

Disadvantages:

  • Deletes all existing data

Example:

While learning JPA relationships and entity mappings, developers often use:

spring.jpa.hibernate.ddl-auto=create to rebuild the schema automatically.

WARNING:

Never use create in production.

A single application restart can wipe out all business data.

create-drop

spring.jpa.hibernate.ddl-auto=create-drop

Description:

Creates schema during startup and removes schema during shutdown.

What Happens?

  • Tables created on startup

  • Tables dropped on shutdown

Best For:

  • Automated testing

  • Integration tests

  • Temporary environments

Advantages:

  • Clean environment every run

  • Perfect for testing

Disadvantages:

  • Data does not persist

Example:

JUnit integration tests often use: spring.jpa.hibernate.ddl-auto=create-drop

Every test starts with a fresh database.

Comparison Table

Value

Creates

Updates

Validates

Drops Data

none

No

No

No

No

validate

No

No

Yes

No

update

Yes

Yes

No

No

create

Yes

Yes

No

Yes

create-drop

Yes

Yes

No

Yes

Recommended Usage

Environment

Recommended Value

Local Development

update

Learning Projects

create

Unit Testing

create-drop

Integration Testing

create-drop

QA/Staging

validate

Production

validate

Production + Flyway

none

Production + Liquibase

none

Real-World Production Strategy

Most modern applications use Flyway or Liquibase instead of allowing Hibernate to manage schemas automatically.

Recommended Configuration:

spring.jpa.hibernate.ddl-auto=validate

or

spring.jpa.hibernate.ddl-auto=none

Example:

spring.jpa.hibernate.ddl-auto=validate spring.flyway.enabled=true

Migration Example:

- - V1__create_users.sql

CREATE TABLE users (
id BIGINT PRIMARY KEY,
name VARCHAR(255)
);

Benefits:

  • Version-controlled database changes

  • Better team collaboration

  • Easier rollbacks

  • Predictable deployments

  • Safer production releases

Common Mistakes Developers Make

Mistake

Using the update in production.

Problem:

Unexpected schema modifications can occur.

Mistake

Using create in production.

Problem:

Complete data loss after restart.

Mistake

Not validating the schema before deployment.

Problem:

Application starts but fails later due to a schema mismatch.

Mistake

Relying on Hibernate for database migrations.

Problem:

Complex migrations become difficult to manage.

Best Practices

  1. Use updates only during development.

  2. Use create-drop for testing.

  3. Use validate in staging and production.

  4. Use Flyway or Liquibase for schema migrations.

  5. Never use create in production.

  6. Keep schema changes version-controlled.

  7. Review migration scripts before deployment.

Conclusion

The spring.jpa.hibernate.ddl-auto property plays a critical role in how Hibernate manages your database schema.

Choosing the correct value depends on your environment and deployment strategy.

Quick Summary:

  • none → No schema management.

  • validate → Only validates schema.

  • update → Updates schema automatically.

  • create → Recreates schema every startup.

  • create-drop → Creates schema on startup and removes it on shutdown.

For most professional Spring Boot applications:

Development → update Testing → create-drop Production → validate or none

Combining Hibernate with Flyway or Liquibase provides the safest and most scalable approach for managing database changes in modern applications.

Tags

Enjoyed this article?

Subscribe to our newsletter for more backend engineering insights and tutorials.