2010-04-23 31 views
10

Tôi quan tâm đến cách hibernate.hbm2ddl.auto = xác nhận thực sự hoạt động và tôi đang đấu tranh để tìm tài liệu toàn diện.Hibernate - hibernate.hbm2ddl.auto = xác nhận

Gần đây chúng tôi đã phát hiện ra hệ thống sản xuất bị ảnh hưởng bởi http://opensource.atlassian.com/projects/hibernate/browse/HHH-3532 (Hibernate khớp với khóa ngoại tên, thay vì chữ ký và do đó sẽ tạo lại chúng cho bạn) và hibernate.hbm2ddl.auto = update đang được xóa khỏi bản phát hành tiếp theo của chúng tôi.

Tôi sẽ rất vui khi chỉ thoát khỏi hibernate.hbm2ddl.auto hoàn toàn và tự quản lý cơ sở dữ liệu của chúng tôi. Tuy nhiên, không phải tất cả đồng nghiệp của tôi đều chia sẻ quan điểm thế giới này và một số người muốn thêm lại vào hibernate.hbm2ddl.auto = xác thực.

Tôi lo ngại điều này sẽ xảy ra cùng một vấn đề và tôi quan tâm đến việc tìm thêm tài liệu về cách xác thực này thực sự hoạt động. Tài liệu cộng đồng Hibernate (http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html) thực sự chỉ làm cho tham chiếu đến các giá trị.

Có ai có bất kỳ con trỏ tài liệu nào hay bất kỳ kinh nghiệm thực tế nào về việc sử dụng xác thực trong hệ thống sản xuất không?

Trả lời

17

Tôi lo ngại điều này sẽ xảy ra cùng một vấn đề và tôi quan tâm đến việc tìm thêm tài liệu về cách xác thực này thực sự hoạt động.

Theo tôi, tài liệu tốt nhất là mã nguồn mà bạn có thể kiểm tra để xem chính xác những gì đang diễn ra. Phương thức liên quan là org.hibernate.tool.hbm2ddl.SchemaValidator#validate().

tôi đã đi một cách nhanh chóng thông qua các mã và tôi không nghĩ rằng SchemaValidator xác minh phím nước ngoài trong cơ sở dữ liệu: nó sẽ kiểm tra sự hiện diện của bảng, cột, máy phát điện id nhưng phím không nước ngoài. Một thử nghiệm đối với cơ sở dữ liệu thú cưng dường như xác nhận hành vi này: việc bỏ ràng buộc FK không phá vỡ xác nhận lược đồ (nói cách khác, trình kiểm tra hợp lệ sẽ kiểm tra xem ứng dụng có thể chạy không, không phải cho tính toàn vẹn tham chiếu).

Bây giờ, HHH-3532 được đánh dấu là cố định, tại sao bạn không nâng cấp lên một phiên bản mới hơn của Hibernate hoặc, nếu việc thay đổi phiên bản của Hibernate là quá nặng, tại sao bạn không áp dụng các bản vá cho HHH-3532 mình?

Có tất cả đã nói, I không sử dụng hibernate.hbm2ddl.auto=update để cập nhật cơ sở dữ liệu sản xuất, tôi sử dụng tập lệnh thay đổi. Nhưng Tôi sử dụng hibernate.hbm2ddl.auto=validate và tôi hài lòng với điều đó.

+0

Cảm ơn Pascal. Tôi không chịu trách nhiệm về các hệ thống sản xuất và, tbh, tôi không tin rằng thử nghiệm hồi quy gần đủ sẽ xảy ra để làm tôi hạnh phúc về việc thay đổi các phiên bản! Nhìn qua lịch sử kiểm soát thay đổi vào ngày khác, tôi nhận thấy rằng ban đầu nó được đặt là xác thực và ai đó đã cập nhật nó thành 'udpate'. Cho rằng, tôi nghĩ rằng nó an toàn hơn để loại bỏ nó - hy vọng một người nào đó ít có khả năng thêm vào một dòng toàn bộ hơn để tinh chỉnh một giá trị trong tương lai! – azp74

Các vấn đề liên quan