- vừa được xem lúc

spring.jpa.hibernate.ddl-auto là cái gì???

0 0 4

Người đăng: Hoag Tran

Theo Viblo Asia

Hiểu đơn giản spring.jpa.hibernate.ddl-auto

Trong Spring Boot + JPA/Hibernate, ta thường viết các class Java có annotation @Entity để mô tả bảng trong database. Khi ứng dụng chạy, Hibernate nhìn vào các @Entity này và hiểu đó là các bảng — tên bảng, các cột tương ứng với các field, v.v.

Ví dụ:

@Entity
public class Product { @Id @GeneratedValue private Long id; private String name; private Double price;
}

=> Tương ứng với 1 bảng product trong DB, có cột id, name, price.


Vấn đề đặt ra

Từ điều cơ bản ở trên, nảy sinh câu hỏi: Hibernate sẽ xử lý database như thế nào khi ứng dụng chạy?

  • Tự tạo bảng mới?
  • Kiểm tra bảng có sẵn không?
  • Cập nhật thêm cột nếu có field mới?
  • Hay không động đến database cả?

➡️ Câu trả lời nằm ở thuộc tính spring.jpa.hibernate.ddl-auto trong file cấu hình (application.properties / application.yml). Chính nó quyết định cách Hibernate tương tác với schema của database khi ứng dụng khởi động.


Các chế độ của spring.jpa.hibernate.ddl-auto bạn cần biết

create

Mỗi lần chạy app → xóa sạch database rồi tạo lại bảng mới theo entity.

  • Dữ liệu cũ mất hết.
  • Ví dụ: hôm nay bạn có bảng product với 100 sản phẩm. Sau khi restart app, Hibernate sẽ DROP bảng đó rồi CREATE bảng mới rỗng.

create-drop

Tương tự create, nhưng sau khi tắt app → xóa luôn bảng.

  • Thường dùng để test unit, không lưu dữ liệu giữa các lần chạy.

update

Hibernate sẽ giữ bảng cũ, nhưng nếu entity có thay đổi thì nó sẽ thêm/sửa vào DB.

  • Ví dụ: ban đầu Product có 2 cột id, name. Sau đó bạn thêm field price. Khi chạy lại app, Hibernate sẽ tự động ALTER TABLE product ADD COLUMN price.
  • Lưu ý:không xóa cột nếu bạn xóa field trong entity → dễ làm DB lộn xộn. Vì vậy không khuyến khích dùng trong production.

validate

Hibernate chỉ kiểm tra entity và DB có khớp nhau không.

  • Nếu không khớp → báo lỗi, nhưng không sửa gì trong DB.
  • Dùng khi bạn muốn đảm bảo entity và schema đồng bộ, nhưng không cho Hibernate tự ý can thiệp.

none

Hibernate không làm gì với database.

  • Bạn phải tự tạo bảng và quản lý DB bằng tay hoặc dùng tool migration (Flyway, Liquibase).
  • Đây là cách an toàn nhất cho production.

Ví dụ minh họa

Giả sử bạn đang làm app quản lý sản phẩm:

Entity ban đầu:

@Entity
public class Product { @Id @GeneratedValue private Long id; private String name;
}
  • Nếu ddl-auto = create → Hibernate sẽ tạo bảng product (id, name) mới mỗi lần chạy.
  • Nếu ddl-auto = update → Nếu bảng chưa có thì Hibernate tạo mới; nếu có rồi thì chỉ thêm/sửa cột cần thiết.
  • Nếu ddl-auto = validate → Hibernate chỉ kiểm tra bảng product đã tồn tại và các cột đúng hay chưa. Sai thì báo lỗi.
  • Nếu ddl-auto = none → Hibernate mặc kệ, bạn phải tạo bảng product bằng SQL hoặc dùng Flyway/Liquibase.

Tóm gọn

  • Dev / Test nhanh: có thể dùng update hoặc create để tiết kiệm thời gian.
  • Học tập / Thử nghiệm: create-drop rất hữu ích cho các test tách biệt.
  • Production (thực tế): nên dùng validate hoặc none kết hợp với công cụ migration như Flyway hoặc Liquibase để quản lý schema một cách an toàn và có thể truy vết.

👉 update tiện nhưng rủi ro (không xóa cột), none/validate an toàn hơn khi kết hợp migration.


Bình luận

Bài viết tương tự

- vừa được xem lúc

Xcode Build Configuration Files

Các phương pháp hay nhất về phát triển phần mềm quy định việc tách biệt cấu hình khỏi mã một cách chặt chẽ. Tuy nhiên, các nhà phát triển trên nền tảng của Apple thường phải vật lộn để giải quyết các nguyên tắc này với quy trình làm việc nhiều dự án của Xcode.

0 0 59

- vừa được xem lúc

Tiêu hoá file cấu hình MongoDB

. Lời giới thiệu:. Cùng mình tìm hiểu cách cấu hình mongodb trên môi trường production ( centos, ubuntu, linux.

0 0 53

- vừa được xem lúc

Cách sử dụng nhiều version php với xampp ( How to use multiple PHP versions at the same time with a single xampp installation? )

Nếu bạn là một lập trình viên php thì chắc hẳn không còn xa lạ với XAMPP, WAMPP ... rồi nhỉ. Thế nhưng các bạn đã rơi vào trường hợp phải cấu hình nhiều version php cho mỗi dự án tương ứng chưa nhỉ.

0 0 51

- vừa được xem lúc

Kết nối Spring Boot với MongoDB

Note: Bài viết mang tích chất lưu lại kiến thức để sử dụng sau, do mày mò khắp google nhặt mỗi nơi một tí mới giải quyết được, nếu bạn nào gặp vấn đề tương tự thì có thể tham khảo. Những thứ cần chuẩn

0 0 56

- vừa được xem lúc

Lưu local environment của máy vào git. Lưu file từ nhiều nơi khác nhau vào một thư mục git.

Bạn quá mệt mỏi vì phải cài đặt lại mọi thứ từ đầu khi đổi máy cũ sang máy mới (cài lại terminal pluggins, cài lại các phần mềm cần thiết,...). Hôm ấy là một ngày tháng 7 nắng nhẹ, một lập trình viên

0 0 42

- vừa được xem lúc

[Phần 1] Hướng dẫn cài đặt Odoo trên môi trường Docker, config cơ bản và host bằng Render

Phần 1: Cài đặt Odoo trên môi trường Docker (localhost). Giới thiệu tổng quan.

0 0 30