2012-01-11 16 views
11

Tôi muốn tạo lược đồ cơ sở dữ liệu trong thời gian ngủ đông đầu tiên. Và hơn nữa, nếu có bất kỳ sửa đổi nào trong lược đồ, như việc thêm một bảng mới hoặc xóa một số cột, tôi muốn cập nhật lược đồ hiện có giữ nguyên dữ liệu trước đó.Làm thế nào để tạo lược đồ cơ sở dữ liệu trong thời gian ngủ đông đầu tiên và tiếp tục cập nhật nó trong trường hợp sửa đổi lược đồ?

Theo tùy chọn được cung cấp tại this question, có vẻ như tôi có thể tạo lược đồ hủy dữ liệu trước đó hoặc tôi có thể cập nhật giản đồ.

Có giá trị nào có thể làm cả hai?

+0

Bạn có muốn tự động hóa tác vụ này không? Nói cách khác, liệu bạn có thực sự tạo DB nhiều lần không? – Xorty

+0

Không, tôi không muốn thèm ăn db một lần. Như tôi đã nói trước đó, nó nên được tạo ra lần đầu tiên, sau đó trở đi nó nên lược đồ db nếu có bất kỳ sửa đổi nào. –

+0

Bạn đã thử bằng cách giữ 'cập nhật', 'Cập nhật' không hoạt động trong cả hai trường hợp ?. – Jayasagar

Trả lời

1

Tôi sẽ không khuyên bạn cập nhật lược đồ db dựa trên các thay đổi đối tượng. Hãy thử đi với Flyway hoặc Liquibase. Bạn có thể tìm các câu hỏi tương tự trên stackoverflow ví dụ: Hibernate/JPA DB Schema Generation Best Practices

+0

Hi kris.Thanks for reply.Actually tôi chỉ muốn biết bây giờ, Có thể trong hibernate để tạo lược đồ cơ sở dữ liệu nếu schema không tồn tại nếu không cập nhật lược đồ nếu nó đã tồn tại và có một số sửa đổi trong tập tin hbm với một số giá trị cho thuộc tính hibernate.hbm2ddl.auto –

23

Thực ra tôi vừa kiểm tra <property name="hibernate.hbm2ddl.auto" value="update" /> thậm chí còn tạo bảng cho lần đầu tiên và sau đó nếu bảng/lược đồ tồn tại, nó cập nhật.

Update thuộc tính có thể áp dụng khi bắt đầu hoặc thêm mô hình mới. Bạn muốn giữ lại các thể hiện thực thể đã lưu trước đó. Đây là kiểu tạo lược đồ mặc định.

Cố gắng cập nhật giản đồ, nếu được yêu cầu. Các cập nhật sau được hỗ trợ:

Xem một số quan sát của tôi

  • Thêm một lĩnh vực - Một cột mới được thêm vào bảng.
  • Đổi tên trường - Cột mới được thêm vào bảng, trong khi cột gốc vẫn còn nhưng không được sử dụng nữa. Lưu ý: Dữ liệu từ cột cũ không được di chuyển sang cột mới.
  • Xóa một trường - Cột vẫn còn nhưng không được sử dụng.
  • Thay đổi loại trường - Loại cột không thay đổi, điều này có thể dẫn đến ngoại lệ loại không phù hợp.
  • Tạo một thực thể - Tạo một bảng mới.
  • Đổi tên một thực thể - Tạo một bảng mới, trong khi bảng gốc vẫn còn.
  • Di chuyển thực thể sang thư mục khác - Tạo bảng mới, trong khi bảng gốc vẫn còn.
  • Xóa thực thể - Bảng vẫn còn.
+0

các điểm thực sự hữu ích !! –

2

Bạn có thể sử dụng 'import.sql'.

Thêm một tập tin import.sql trong tài nguyên như sau:

/*create database at first time*/ 
CREATE SCHEMA your-database-name; 

và thêm một dòng trong 'hibernate.cfg.xml' như sau:

<hibernate-configuration> 
    <session-factory> 
     ... 
     ... 
     <property name="hbm2ddl.import_files">import.sql</property> 
     ... 
     ... 
    </session-factory> 
</hibernate-configuration> 

Vì vậy, nếu không tồn tại các cơ sở dữ liệu, hibernate tạo db mới.