2011-02-10 16 views
6

tôi cần phải mở rộng một thực thể, với các đặc tính giống nhau mà không sử dụng các lớp trừu tượng.Mở rộng các thực thể ngủ đông với chú thích

tôi có thể viết mã gì đó như dưới đây không?

@Entity 
@Table(name="ABC") 
@SequenceGenerator(sequenceName="SEQ_ABC",name="idGenerator",allocationSize=1) 
public class Abc { 
.. // define members 
} 

@Entity 
@Table(name="EX_ABC") 
public class ExAbc extends Abs { 
.. // define extras.. 
} 

thx trước

+1

Ý của bạn là 'mở rộng Abc' thay vì 'mở rộng Abs'? –

Trả lời

15

Vâng, cái này hoạt động mà không bất kỳ vấn đề. Tuy nhiên, bạn nên xem qua số inheritance annotation.

Vấn đề là gì: Bạn có bảng "Abc" chứa trường1, đệ2; Sau đó, bạn có ExAbc có chứa các trường "Abc" và trong trường adition3. Bây giờ, nếu bạn nghĩ về cơ sở dữ liệu, hệ thống đó nên làm gì với hai lớp này? Đặt chúng vào một bảng duy nhất cho phép field3 = null cho tất cả các hàng thuộc loại "Abc"? hoặc đặt chúng thành hai bảng khác nhau? hoặc đặt các trường phổ biến trong một bảng và tạo một trường thứ hai cho tệp đệ trình bổ sung3?

Mỗi giải pháp có những ưu điểm và nhược điểm của nó như bạn có thể đọc trong liên kết tôi đăng, sau đó tùy thuộc vào tình huống của bạn để quyết định đó là cách tốt nhất.

(Default Tôi nghĩ là chiến lược tham gia, tuy nhiên tôi sẽ không tính vào đó là để cho mỗi cơ sở dữ liệu)

+0

Thx cho câu trả lời Hons, quy tắc kinh doanh của tôi phù hợp với @Inheritance (chiến lược = InheritanceType.TABLE_PER_CLASS), nhưng khi tôi lấy hồ sơ, tôi nhận được cả phụ huynh và hồ sơ trẻ em (UNION ALL), làm thế nào có thể tôi lấy bản ghi cha mẹ hoặc con cụ thể. thx trước một lần nữa – emre

+0

Xin lỗi, tôi không chắc chắn ý của bạn là gì. Bạn làm một SELECT trên EX_ABC và sau đó bạn nhận được các thực thể của cả hai bảng? – Hons

+0

Vâng, đây là những gì sẽ xảy ra .. không biết làm thế nào để tránh điều đó, tôi quá. Xem https://forum.hibernate.org/viewtopic.php?f=1&t=958277 – Martin