2008-11-20 14 views
5

Tôi có một bảng trong cơ sở dữ liệu MYSQL không có khóa chính, nhưng có một khóa duy nhất trên hai cột. Khi sử dụng công cụ kỹ sư đảo ngược của MyEclipse's Hibernate để tạo một ánh xạ cho bảng đó, nó tạo ra hai lớp, một lớp được đặt tên theo chính bảng, và một với hậu tố "Id". Có vẻ như hầu hết các phương pháp hữu ích đã kết thúc trong lớp Id, vì vậy có vẻ như đó là phương pháp bạn sẽ khởi tạo và lưu vào dữ liệu kiên trì. Tôi có thể đánh giá cao thực tế là lớp Id được tạo ra để đại diện cho một hàng duy nhất trong đối tượng bảng/ánh xạ, nhưng việc sử dụng tách ra thành hai lớp là gì, và những gì, sau đó là việc sử dụng không phải là Id -suffixed class?Tại sao kỹ thuật đảo ngược Hibernate của MyEclipse tạo nhiều lớp khi ánh xạ các bảng nhất định?

Đồng nghiệp của tôi cho rằng bạn có thể thực hiện tương tự chỉ với một lớp và chế độ gián đoạn khi sử dụng kỹ thuật đảo ngược cho các bảng không có khóa chính. Tôi, mặt khác, giả sử các nhà phát triển MyEclipse thông minh hơn tôi nhiều và có một lý do thực sự tốt để làm điều đó theo cách này. Lanhung?

Trả lời

0

Bạn giả sử quá nhiều bạn của tôi. Những công cụ này không thực sự từ nhóm MyEclipse, từ công cụ Hibernate Tools (JBoss, các nhà phát triển của Hibernate).

Đây là công cụ có lập trình không thể đoán được mọi thứ. Nó là khá tốt cho công cụ đơn giản cũng anotated, nhưng đôi khi, nó sẽ không tạo ra chính xác những gì bạn cần.

Lớp id là cần thiết thường để biểu diễn khóa chính kết hợp (khóa sử dụng nhiều thuộc tính). Nó sử dụng các thành phần lớp học khái niệm Hibernate.

Cũng có thể tinh chỉnh tùy chọn trình phát một chút.

Trong trường hợp của bạn, tốt nhất nên làm như đồng nghiệp của bạn nói. Tạo các lớp thực thể của riêng bạn.

0

Trong tập tin đảo ngược thiết kế của bạn:

<table schema="public" name="yourtable"> 
      <primary-key> 
       <!-- generator may not be necessary for mysql --> 
       <generator class="increment"></generator> 
       <key-column name="column_name_of_primary_key" /> 
      </primary-key> 
     </table> 
0

Tôi đã có một vấn đề tương tự chạy các công cụ trong Eclipse chống lại một trường hợp Teradata. Tôi đã có một số quan điểm để đảo ngược, và họ đã ở trong một lược đồ. Tôi đã nhận lớp AcxiomDataId tạo với điều này:

<table catalog=".*" schema="U01TKE_GRPR_RADMT_VW" name="F_ACXM_MBR" class="AcxiomData"> 
    <primary-key> 
     <generator class="increment"></generator> 
     <key-column name="MBR_UNIQ_KEY" property="memberUniqKey" /> 
    </primary-key> 
</table> 

Nhưng loại bỏ các lược đồ và Danh mục các thuộc tính từ các yếu tố bảng, tôi đã không nhận được lớp AcxiomDataId:

<table name="F_ACXM_MBR" class="AcxiomData"> 
    <primary-key> 
     <generator class="increment"></generator> 
     <key-column name="MBR_UNIQ_KEY" property="memberUniqKey" /> 
    </primary-key> 
</table> 

Không biết tại sao đó là.

0

Tôi phải đối mặt với cùng một vấn đề. Tôi nghĩ khi bạn không có bất kỳ chìa khóa nào trong bảng thì nó sẽ tạo ra hai lớp. Nếu không, nếu bạn có bất kỳ khóa nào trong bảng thì nó chỉ tạo ra một khóa.

Ít nhất là đối với tôi sau khi thêm khóa chính vào bảng, nó chỉ tạo ra một Lớp đại diện cho bảng. Nếu tôi loại bỏ khóa chính thì nó tạo ra hai lớp.

Chủ đề cũ, nhưng tôi nghĩ hữu ích cho ai đó.

0

Bạn phải đi trong db của bạn và kiểm tra xem bạn đã thiết lập trường là Khóa chính, sau đó tệp kỹ thuật đảo ngược ngủ đông, không tạo nhiều lớp nữa.