2009-08-02 34 views
6

khi tôi chạy công cụ ngủ đông nó đọc từ db và tạo các lớp java cho mỗi bảng, và lớp java cho các khóa chính kết hợp. thật tuyệt vời.Chạy tạo chú thích công cụ ngủ đông mà không có thuộc tính "danh mục"

vấn đề là dòng này

@Table(name="tst_feature" 
    ,catalog="tstdb" 
) 

trong khi tên bảng là cần thiết, các "cửa hàng" thuộc tính không cần thiết. đôi khi tôi muốn sử dụng "tstdb", đôi khi tôi muốn sử dụng "tstdev"

tôi nghĩ db nào được chọn tùy thuộc vào địa chỉ kết nối jdbc nhưng khi tôi thay đổi url jdbc để trỏ đến "tstdev", nó vẫn còn sử dụng "tstdb"

vậy, tôi biết những gì phải được thực hiện, chỉ không biết làm thế nào nó được thực hiện lựa chọn của tôi là

  • ngăn chặn việc tạo ra các "cửa hàng" thuộc tính hiện tại tôi đang làm điều này bằng tay (không phải rất hiệu quả) hoặc tôi có thể viết một chương trình mà phân tích các file java và loại bỏ các thuộc tính bằng tay nhưng tôi hy vọng tôi không phải

HOẶC

  • tìm một cách để nói hibernate để bỏ qua thuộc tính "catalog" và sử dụng lược đồ được chỉ định rõ ràng. tôi không biết cài đặt chính xác mà tôi phải thay đổi để đạt được điều này hoặc thậm chí nếu tùy chọn có sẵn.

Trả lời

7

Bạn cần phải làm theo 3 bước -

1) Trong hibernate.cfg.xml, thêm tài sản

hibernate.default_catalog = MyDatabaseName 

này (theo quy định tại bài viết ở trên)

2) Trong hibernate.reveng.xml, thêm tất cả bộ lọc bảng như thế này

table-filter match-name="MyTableName" 

(chỉ này, không có tên cửa hàng ở đây)

3) tạo lại mã Hibernate

Bạn sẽ không thấy bất kỳ tên catalô trong bất kỳ *.hbm.xml tập tin.

Tôi đã sử dụng Eclipse Galileo và Hibernate-3.2.4.GA.

1

Có tùy chỉnh cho thế hệ, điều đó sẽ cho biết những bảng nào sẽ được đưa vào danh mục nào.

Bạn có thể chỉ định danh mục theo cách thủ công (trong tệp reveng, thành phần <table>) hoặc theo chương trình (trong lớp ReverseEngineeringStrategy tùy chỉnh của bạn nếu tôi nhớ rõ).

Ngoài ra, gần đây tôi đã phải sửa đổi các mẫu tạo.

Xem tài liệu tham khảo:

Rất tiếc, điều này có thể chính xác hơn, nhưng hiện tại tôi không có quyền truy cập vào máy tính của mình.

+0

yếu tố bảng chọn bảng từ danh mục, có. nhưng đó không phải là tôi muốn. tôi muốn thực thể được tạo mà không có thuộc tính "danh mục" nếu thuộc tính danh mục ở đó, bất kể url jdbc của tôi là gì, nó vẫn trỏ đến cùng một lược đồ, tôi muốn có thể chuyển đổi giản đồ mà không tái tạo các thực thể. –

+0

tôi đã xem xét các tập tin FTL có một dòng mà nói <# nếu clazz.table.catalog? Tồn tại> , danh mục = "$ {clazz.table.catalog}" bất kỳ ý tưởng về cách làm tôi đặt cái này thành sai? –

+1

tôi đã tìm ra nó sử dụng xxx trong tệp hibernate.cfg.xml của bạn –

0

Danh mục thuộc tính là thuộc tính "kết nối" và phải được chỉ định trong tệp cấu hình "kết nối" hibernate.cfg.xml và KHÔNG trong tệp cấu hình "dữ liệu" *.hbm.xml.

Tôi tạo mã ngủ đông qua tác vụ kiến ​​<hibernatetool> và tôi đặt tác vụ thay thế này sau khi tạo lại (thay thế tên lược đồ bằng cơ sở dữ liệu của bạn).

<replace dir='../src' token='catalog="schema-name"' value=''> 

Vì vậy, sau khi tạo danh mục thuộc tính đã bị xóa.

Đây là giải pháp thay thế, nhưng mã được tạo ra hoạt động trong sự phát triển của tôi một môi trường sản xuất có tên lược đồ khác nhau.

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