惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

AWS News Blog
AWS News Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
Engineering at Meta
Engineering at Meta
T
Tailwind CSS Blog
T
The Blog of Author Tim Ferriss
L
LangChain Blog
Vercel News
Vercel News
N
Netflix TechBlog - Medium
Hacker News - Newest:
Hacker News - Newest: "LLM"
Spread Privacy
Spread Privacy
小众软件
小众软件
H
Help Net Security
The Last Watchdog
The Last Watchdog
Forbes - Security
Forbes - Security
WordPress大学
WordPress大学
Know Your Adversary
Know Your Adversary
Recent Commits to openclaw:main
Recent Commits to openclaw:main
H
Heimdal Security Blog
GbyAI
GbyAI
P
Privacy International News Feed
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
The Cloudflare Blog
爱范儿
爱范儿
V
V2EX
The Register - Security
The Register - Security
B
Blog RSS Feed
Apple Machine Learning Research
Apple Machine Learning Research
O
OpenAI News
Cisco Talos Blog
Cisco Talos Blog
Cloudbric
Cloudbric
Security Archives - TechRepublic
Security Archives - TechRepublic
S
Secure Thoughts
L
LINUX DO - 最新话题
Recorded Future
Recorded Future
P
Proofpoint News Feed
PCI Perspectives
PCI Perspectives
Hugging Face - Blog
Hugging Face - Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tor Project blog
Latest news
Latest news
Project Zero
Project Zero
月光博客
月光博客
F
Fortinet All Blogs
A
Arctic Wolf
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Y
Y Combinator Blog
N
News and Events Feed by Topic

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
Understanding Hibernate ddl-auto in Spring Boot: When to Use create, update, validate, and none
Ayush Shrivastava · 2026-06-01 · via DEV Community

Choosing the wrong spring.jpa.hibernate.ddl-auto setting can lead to unexpected schema changes or even data loss. In this guide, you'll learn what each ddl-auto value does (none, validate, update, create, and create-drop), when to use them, real-world examples, common mistakes, and production-ready best practices using Flyway and Liquibase.

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

  1. 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 schema manually

Real-World Example:

A banking application manages schema changes using Flyway migration scripts.

Hibernate should not modify the schema.

spring.jpa.hibernate.ddl-auto=none


2. validate

spring.jpa.hibernate.ddl-auto=validate

Description:

Hibernate validates that database tables match entity definitions.

What Happens?

• Checks table existence
• Checks column existence
• Checks data types
• Throws exception if mismatch exists

Best For:

• Production
• Staging
• CI/CD validation

Advantages:

• Detects schema issues early
• Prevents runtime failures

Disadvantages:

• Does not create or modify tables

Real-World Example:

Entity:

@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.


3. 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

Real-World 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.


4. 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 every startup
• Useful during rapid experimentation

Disadvantages:

• Deletes all existing data

Real-World 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.


5. 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

Real-World 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 #1

Using update in production.

Problem:

Unexpected schema modifications can occur.

Mistake #2

Using create in production.

Problem:

Complete data loss after restart.

Mistake #3

Not validating schema before deployment.

Problem:

Application starts but fails later due to schema mismatch.

Mistake #4

Relying on Hibernate for database migrations.

Problem:

Complex migrations become difficult to manage.


Best Practices

  1. Use update 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.