2010-05-28 13 views
7

में शामिल हो रहा है मैं समझने की कोशिश कर रहा हूं कि हाइबरनेट में पॉलीमोर्फिक एक-से-कई को सर्वोत्तम तरीके से कैसे कार्यान्वित किया जाए।हाइबरनेट - स्थायी पॉलीमोर्फिक

उदाहरण के लिए:

@MappedSuperclass 
public class BaseEntity { 
    Integer id; 
    // etc... 
} 

@Entity 
public class Author extends BaseEntity {} 

@Entity 
public class Post extends BaseEntity {} 

@Entity 
public class Comment extends BaseEntity {} 

और अब, मैं भी लेखा परीक्षा की जानकारी को बनाए करने के लिए, निम्न वर्ग के साथ करना चाहते हैं:

@Entity 
public class AuditEvent { 
    @ManyToOne // ? 
    BaseEntity entity; 
} 

auditEvent.entity के लिए उपयुक्त मानचित्रण क्या है? इसके अलावा, हाइबरनेट वास्तव में कैसे बनेगा? क्या जुड़ने वाली तालिकाओं की एक श्रृंखला उत्पन्न होगी (AuditEvent_Author, AuditEvent_Post, AuditEvent_Comment), या क्या कोई बेहतर तरीका है?

नोट, मैं अपने अन्य इकाई वर्गों को शामिल होने के दूसरे पक्ष (उदाहरण के लिए, List<AuditEvent> eventsBaseEntity पर) का खुलासा नहीं करना चाहूंगा - लेकिन यदि यह लागू करने का सबसे साफ तरीका है, तो यह पर्याप्त होगा।

उत्तर

4

एक मैप किए गए सुपरक्लास एक इकाई नहीं है और इस प्रकार एक एसोसिएशन का हिस्सा नहीं हो सकता है (जैसा कि EJB-199 में याद दिलाया गया है)। तो या तो:

  • अपने BaseEntity सार बनाने के लिए और एक TABLE_PER_CLASS रणनीति का उपयोग (देखें इस previous answer)
  • पदानुक्रम में किसी अन्य AuditableEntityइकाई लागू करने और उपयोग करने के क्या आपके उपयोग के मामले के लिए सबसे appropriate inheritance strategy होगा।
  • Envers
का उपयोग करने पर विचार करें
संबंधित मुद्दे