2008-09-15 32 views
5

Tôi đang tìm một giải pháp chung để nâng cấp giản đồ cơ sở dữ liệu bằng các công cụ ORM, như JPOX hoặc Hibernate. Làm thế nào để bạn làm điều đó trong các dự án của bạn?Làm thế nào để nâng cấp lược đồ cơ sở dữ liệu được xây dựng bằng một công cụ ORM?

Giải pháp đầu tiên mà tôi nghĩ đến là tạo cơ chế riêng để nâng cấp cơ sở dữ liệu, với các tập lệnh SQL thực hiện tất cả công việc. Nhưng trong trường hợp này tôi sẽ phải nhớ về việc tạo các tập lệnh mới mỗi khi ánh xạ đối tượng được cập nhật. Và tôi sẽ vẫn phải đối phó với các truy vấn SQL cấp thấp, thay vì chỉ xác định ánh xạ và cho phép các công cụ ORM thực hiện tất cả công việc ...

Vì vậy, câu hỏi là làm thế nào để làm điều đó đúng cách. Có lẽ một số công cụ cho phép đơn giản hóa tác vụ này (ví dụ, tôi nghe nói rằng Rails có cơ chế được tích hợp sẵn), nếu vậy hãy giúp tôi quyết định công cụ ORM nào sẽ chọn cho dự án Java tiếp theo của tôi.

Trả lời

7

LiquiBase là thư viện nguồn mở thú vị để xử lý các phép tái cơ sở dữ liệu (nâng cấp). Tôi đã không sử dụng nó, nhưng chắc chắn sẽ cung cấp cho nó một thử trên dự án tiếp theo của tôi, nơi tôi cần phải nâng cấp một lược đồ db.

0

Chúng tôi đã kết thúc thực hiện cập nhật các kịch bản mỗi lần chúng tôi thay đổi cơ sở dữ liệu. Vì vậy, có một kịch bản từ phiên bản 10 đến 11, từ 11 đến 12, vv. Sau đó, chúng tôi có thể chạy bất kỳ tập lệnh liên tiếp nào để bỏ qua từ một số phiên bản hiện tại sang phiên bản mới. Chúng tôi đã lưu trữ phiên bản hiện tại trong cơ sở dữ liệu để chúng tôi có thể phát hiện điều này khi khởi động.

Có điều này liên quan đến mã cơ sở dữ liệu cụ thể! Một trong những vấn đề chính với Hibernate!

0

Khi làm việc với Hibernate, tôi sử dụng lớp trình cài đặt chạy từ dòng lệnh và có các tùy chọn để tạo giản đồ cơ sở dữ liệu, chèn dữ liệu cơ sở và cập nhật động lược đồ cơ sở dữ liệu bằng cách sử dụng SchemaUpdate. Tôi thấy nó cực kỳ hữu ích. Nó cũng mang lại cho tôi một nơi để đặt các kịch bản một lần sẽ chạy khi một phiên bản mới được khởi chạy, ví dụ, điền vào một trường mới trong một bảng DB hiện có.

2

Tôi không hiểu tại sao các lược đồ được tạo ORM khác với các lược đồ DB khác - vấn đề là như nhau. Giả sử ORM của bạn sẽ nhổ ra một kịch bản thế hệ, bạn có thể sử dụng công cụ bên ngoài để làm khác biệt

Tôi đã không dùng thử nhưng google đã trở lại với tùy chọn SQLCompare - Tôi chắc chắn có những tùy chọn khác.

2

Chúng tôi viết mã lệnh cập nhật SQL và chúng tôi chia nhỏ lược đồ và xây dựng lại nó áp dụng các kịch bản cập nhật như là một phần của quá trình xây dựng liên tục của chúng tôi. Nếu bất kỳ ánh xạ ngủ đông nào không khớp với lược đồ, thì việc xây dựng sẽ thất bại.

1

Bạn có thể kiểm tra điều này feature comparison của một số công cụ nâng cấp giản đồ cơ sở dữ liệu.

Một so sánh về số lượng câu hỏi trong SOW của một số những công cụ:

  • mybatis (1049 câu hỏi được gắn thẻ)
  • Liquibase (663 câu hỏi được gắn thẻ)
  • Flyway (400 câu hỏi được gắn thẻ)
  • DBDeploy (24 câu hỏi được gắn thẻ).
Các vấn đề liên quan